使用Python / Django / Mod-Rewrite进行URL重定向
我正在为一个关于船只修理的问答网站设置网址重定向。我希望 boatrepaired.com
能自动跳转到 www.boatrepaired.com
。我通常是做php的,所以对OSQA使用的python等有点困惑。我在我的apache配置文件中添加了以下内容...
<Directory /opt/OSQA/>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^boatrepaired\.com [NC]
RewriteRule ^(.*)$ http://www.boatrepaired.com/$1 [L,R=301]
</Directory>
这个设置有点效果,它把 boatrepaired.com
重定向到了 www.boatrepaired.com/osqa.wsgi/
如果我把第5行的 $1 去掉,重定向就完美了,但这样会把所有人都重定向回首页。希望能得到一些帮助。
谢谢,
克里斯
3 个回答
0
如果你想使用Apache的重写功能,你遇到的问题是因为重写规则没有正确提取网址。Django需要的正则表达式比Apache网站上给出的例子要复杂一些。比如说,如果你想把 http://example.com 重定向到 http://www.example.com,你可以这样做:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)django.wsgi(.*)$ http://www.example.com$2 [R=301,L]
这里的 $2 是正则表达式的第二个匹配项,也就是你想要添加到 www.example.com 的部分。
0
为什么不在Apache里完全解决这个问题呢:
<VirtualHost ..>
ServerName boatrepaired.com
Redirect permanent / http://www.boatrepaired.com/
</VirtualHost>
<VirtualHost ..>
ServerName www.boatrepaired.com
... basic wsgi / django config ...
</VirtualHost>
可以为两个域名分别设置虚拟主机,并且从“错误”的域名永久重定向到正确的域名。这样做会对域名下的所有路径都有效,而不仅仅是根路径(/)。
0
OSQA是基于Django的,而Django可以自动为你处理这个问题(我很确定在OSQA中这个功能默认是开启的)。
如果没有开启,可以在你的Django设置模块中添加以下设置:
如果
PREPEND_WWW
设置为True,那么那些没有以“www.”开头的网址会被重定向到同一个网址,但会加上“www.”。
同时,确保 django.middleware.common.CommonMiddleware
是启用状态。