【发布时间】:2009-01-13 14:54:59
【问题描述】:
为什么我的 mod_rewrite 会这样?
add path info postfix: /home/mobelluk/public_html/about.php -> /home/mobelluk/public_html/about.php/
这会导致所有内容都出现不需要的尾部斜杠。
我已禁用我的所有 .htaccess 规则,因此它们不在等式中。
【问题讨论】:
标签: apache mod-rewrite
为什么我的 mod_rewrite 会这样?
add path info postfix: /home/mobelluk/public_html/about.php -> /home/mobelluk/public_html/about.php/
这会导致所有内容都出现不需要的尾部斜杠。
我已禁用我的所有 .htaccess 规则,因此它们不在等式中。
【问题讨论】:
标签: apache mod-rewrite
显然在某些情况下 mod_rewrite 重新附加后修复部分存在问题 https://issues.apache.org/bugzilla/show_bug.cgi?id=38642
问题:
如果 .htaccess 文件中的多个 RewriteRules 匹配,则 PATH_INFO 的不需要的副本可能会累积在 URI 的末尾。
如果您使用的是 Apache 2.2.12 或更高版本,则可以使用 DPI 标志来防止这种情况发生 http://httpd.apache.org/docs/2.2/rewrite/flags.html
【讨论】:
DPI 标志基本上意味着“修复 mod_rewrite 错误”。如果你不想被这个错误发现,你应该在你写的每一个RewriteRule 中使用它。
在搜索“添加路径信息后缀”时,首先出现了这个问题,虽然它最终确实解决了我的问题,但我花了将近 2 个小时才明白发生了什么。 在网站上工作时,我需要重写:
/resources/band/ -> resources.html?section=band
完成了这个 mod_rewrite:
RewriteRule ^resources/(.*)/$ resources.html?section=$1 [L]
将其更改为 [DPI] 没有任何效果...我的 resources.html 页面上的代码肯定 100% 被调用,但 section=band 的参数没有被发送给它。
获取这个...如果您发现 Apache 的文档无法阅读,Multiviews 就是问题所在。当浏览器看到多视图在服务器上时,会看到 /resources/band/ 并说“哦,我真聪明,我知道那是什么意思!”并重定向:
/resources/band/ -> /resources.html/band/
真实故事!我在虚拟主机上将 +Multiviews 更改为 -Multiviews - 问题立即解决。
【讨论】:
是否有可能新服务器加载了mod_dir,而旧服务器没有加载DirectorySlash On,这导致了这个问题?
(请注意,如果 mod_dir 已加载并且没有任何内容覆盖它,则 DirectorySlash On 是默认值)
【讨论】:
我通过在我的虚拟主机选项配置中禁用多视图解决了这个问题。我正在重写类似于下面的内容:
希望重写:
/dir/ -> /dir.html
实际翻译:
/dir/ -> /dir.html (MultiViews)
/dir.html -> /dir.html/ (mod_rewrite: 404, didn't exist)
禁用多视图会阻止初始翻译发生。我本可以调整重写规则来弥补这一点,但我并没有将 MultiViews 用于其他任何事情。
以下帖子向我提示了这个问题: https://velenux.wordpress.com/2012/07/17/apache-mod_rewrite-multiple-add-path-info-postfix/#comment-1476
【讨论】: