使用Python / Django / Mod-Rewrite进行URL重定向

0 投票
3 回答
1410 浏览
提问于 2025-04-16 04:58

我正在为一个关于船只修理的问答网站设置网址重定向。我希望 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 是启用状态。

撰写回答