该网站生成不同的 URL,这些 URL 都类似于 http://example.com/'somepath'。我想要做的是将用户从 http://example.com/'somepath' 重定向到 http://www.example.com/'somepath'。我发现可以使用 django-hosts 来完成。
正如说明中所述,我在 settings.py 中有以下内容:
ALLOWED_HOSTS = ['www.example.com', 'example.com']
INSTALLED_APPS = [
...,
'django_hosts',
]
MIDDLEWARE = [
'django_hosts.middleware.HostsRequestMiddleware',
...
'django_hosts.middleware.HostsResponseMiddleware',
]
ROOT_URLCONF = 'appname.urls'
ROOT_HOSTCONF = 'appname.hosts'
DEFAULT_HOST = 'www'
DEFAULT_REDIRECT_URL = "http://www.example.com"
PARENT_HOST = "example.com"
在hostsconf/urls中:
from django.conf.urls import url
from .views import wildcard_redirect
urlpatterns = [
url(r'^(?P<path>.*)', wildcard_redirect),
]
在主机配置/视图中:
from django.conf import settings
from django.http import HttpResponseRedirect
DEFAULT_REDIRECT_URL = getattr(settings, "DEFAULT_REDIRECT_URL", "http://www.example.com")
def wildcard_redirect(request, path=None):
new_url = DEFAULT_REDIRECT_URL
if path is not None:
new_url = DEFAULT_REDIRECT_URL + "/" + path
return HttpResponseRedirect(new_url)
但看起来它不起作用,因为如果我访问 http://example.com/'somepath' 它会返回“400 Bad Request”和 http://www.example.com/'somepath'指向正确的目的地。我做错了什么?
尝试默认设置 PREPEND_WWW
https://docs.djangoproject.com/en/1.10/ref/settings/#prepend-www
我也遇到了同样的问题。
我在 Windows 上执行本地测试,每次我的服务器仅在 url www.example.local 上工作,而不仅仅是 example.local.
我意识到问题本身不在我的 Django 项目中,而是在我的操作系统主机文件中,即我的本地 DNS 中。
为了解决这个问题,我必须在相应的文件中添加 example.local 和 www.example.local 作为 127.0.0.1 的路径。
The final files were:
我的网站/settings.py:
ALLOWED_HOSTS = ['www.example.local', 'example.locol']
INSTALLED_APPS = [
...,
'django_hosts',
]
MIDDLEWARE = [
'django_hosts.middleware.HostsRequestMiddleware',
...
'django_hosts.middleware.HostsResponseMiddleware',
]
ROOT_URLCONF = 'appname.urls'
ROOT_HOSTCONF = 'appname.hosts'
DEFAULT_HOST = 'www'
我的网站/hosts.py:
from django.conf import settings
from django_hosts import patterns, host
host_patterns = patterns('',
host('', settings.ROOT_URLCONF, name='www'),
host(r'user', 'User.urls', name='user'),
)
主机(操作系统文件):
127.0.0.1 localhost
::1 localhost
127.0.0.1 example.local
127.0.0.1 www.example.local
127.0.0.1 user.example.local
修改您的本地 DNS(主机文件)。在 Linux 和 macOS 上,要修改的文件位于 /etc/hosts 中。在 Windows 上,相关文件位于 %SystemRoot%\system32\drivers tc\hosts。
希望这有帮助! :)
参考资料: