【问题标题】:htaccess rewrite incorrectly appending URL with mod_wsgi config file pathhtaccess 用 mod_wsgi 配置文件路径重写错误地附加 URL
【发布时间】: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


【解决方案1】:

如果你想在你的 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 的域中划定句点。在正则表达式中, .意思是“匹配所有”

【讨论】:

  • 谢谢罗亚。我会试试这个。我确实忘记划定句号了。
猜你喜欢
  • 2020-06-10
  • 1970-01-01
  • 2014-09-30
  • 1970-01-01
  • 2021-05-08
  • 1970-01-01
  • 1970-01-01
  • 2016-09-12
  • 1970-01-01
相关资源
最近更新 更多