我有一个子域m.example.com
,我希望指向与在apache2 / django1.3安装上运行的example.com/mobile
相同的位置。
example.com
是目标网页,我配置了urls.py
,以便匹配/^mobile$/
的网址将提供给该网页的移动版本。我调查了<VirtualHost>
,但我认为它需要一个物理位置让我指向m.example.com
和django网址,除了项目目录的根目录之外没有物理位置。
我不确定配置是在apache端还是django端进行更改。
我也查看了Apache的mod_rewrite
模块,但我更希望如果我不必将m.example.com
重定向到example.com/mobile
答案 0 :(得分:4)
我会避免apache重定向,只使用中间件。
通常使用中间件来获取上下文变量,该变量提供用户正在使用的当前域。
来自:http://djangosnippets.org/snippets/1119/
class SubdomainMiddleware:
""" Make the subdomain publicly available to classes """
def process_request(self, request):
domain_parts = request.get_host().split('.')
if (len(domain_parts) > 2):
subdomain = domain_parts[0]
if (subdomain.lower() == 'www'):
subdomain = None
domain = '.'.join(domain_parts[1:])
else:
subdomain = None
domain = request.get_host()
request.subdomain = subdomain
request.domain = domain
在您的视图中,可以使用子域和域值来正确切换内容和逻辑。
def homepage(request):
if request.subdomain == 'm':
return movil_homepage(request)
else:
return default_homepage(request)
您甚至可以获取装饰者,并在您的网站上映射所有视图。
更常见的是,它只是构建第二个使用相同数据库的项目。这取决于你。
答案 1 :(得分:1)
虽然您可以将m.example.com
代理到example.com/mobile
,但这会导致您的reverse
和url
功能中断。
因此,解决此问题的唯一正确方法是为您的移动网址创建一个使用<VirtualHost>
的额外^$
。