【发布时间】:2013-05-01 21:12:04
【问题描述】:
我目前正在迁移域 [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。这是不好的做法吗?
【问题讨论】:
-
使用 HttpResponsePermanentRedirect 意味着每次重定向都会命中您的 django 应用程序。最佳实践是最小化在重定向发生之前触及的系统。 Django 在堆栈中更深一层,因此在返回重定向响应时会产生额外的开销。显然,如果您服务的流量很少,那么开销几乎不值得考虑......
-
编辑您的问题并提供 mod_wsgi 配置以说明您如何安装 WSGI 应用程序。您使用的是 WSGIScriptAlias 还是 Alias/AddHandler。另请参阅 code.google.com/p/modwsgi/wiki/… 中有关重写的说明
-
django 重定向在旧服务器上,不再使用,所以额外的命中不是太大的问题。会尽可能粘贴到 WSGI 配置中。
标签: regex django apache .htaccess mod-wsgi