htaccess重写错误地使用mod_wsgi配置文件路径附加URL

时间:2013-05-01 21:12:05

标签: regex django apache .htaccess mod-wsgi

我目前正在迁移域名[old_domain] - > [NEW_DOMAIN]。

当我在/etc/httpd/conf/httpd.conf中找到htaccess规则和配置文件时出现了问题:

的httpd.conf

AllowOverride All

最初我找不到上面的内容,允许.htaccess重写规则工作,我仍然担心我可能会错误地允许它。

我试过把它放在类似但不起作用的地方:

<Directory "/path/to/django/project/">
    AllowOverride All
</Directory>

一旦我确实将.htaccess文件重写为工作(使用以下内容),URL开始返回奇怪的内容。

django项目目录中的

.htaccess

RewriteEngine On
RewriteCond %{HTTP_HOST} !^old_domain.com/$ [NC]
RewriteRule ^(.*)$ http://new_domain.com/$1 [L,R=301]

发送的网址

http://old_domain.com/news/

收到的网址

http://new_domain.com/apache/production.wsgi/news/

差不多......但是有谁能说明为什么会发生这种情况? 我真的不想在new_domain端剥离/apache/production.wsgi/(除非这是预期的吗?)

提前致谢。

编辑:使用django的HttpResponsePermanentRedirect进行了一次快速修复。这是不好的做法吗?

1 个答案:

答案 0 :(得分:2)

如果要在django文件夹中使用rewrite指令,则需要启用覆盖。否则他们将被忽略:

http://httpd.apache.org/docs/current/mod/core.html#allowoverride

希望这可以解决重写问题:

Options +FollowSymLinks 
RewriteEngine on 
RewriteCond %{HTTP_HOST} !^newdomain\.com 
RewriteRule ^(.*)$ http://www.newdomain.com/$1 [R=301,L]

请务必分隔RewriteCond域中的句点。在正则表达式中,。表示“全部匹配”