Django-hosts 将非 www 重定向到 www

问题描述 投票:0回答:2

该网站生成不同的 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'指向正确的目的地。我做错了什么?

django http-redirect hosts
2个回答

0
投票

我也遇到了同样的问题。

我在 Windows 上执行本地测试,每次我的服务器仅在 url www.example.local 上工作,而不仅仅是 example.local.

我意识到问题本身不在我的 Django 项目中,而是在我的操作系统主机文件中,即我的本地 DNS 中。

为了解决这个问题,我必须在相应的文件中添加 example.localwww.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

希望这有帮助! :)


参考资料:

Django-Hosts 文档

中:Django-Hosts 教程

© www.soinside.com 2019 - 2024. All rights reserved.