为什么我的mod_rewrite会这样做?
add path info postfix: /home/mobelluk/public_html/about.php -> /home/mobelluk/public_html/about.php/
会导致一切不必要的尾部斜杠。
我已禁用所有.htaccess规则,因此它们不在等式中。
答案 0 :(得分:18)
显然在某些情况下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
答案 1 :(得分:2)
是否有可能新服务器加载了mod_dir,而旧版服务器没有加载DirectorySlash On
,这导致了这个问题?
(请注意,DirectorySlash On
是默认情况,如果mod_dir
已加载且没有任何内容覆盖它<)
答案 2 :(得分:1)
我通过在虚拟主机选项配置中禁用MultiView来解决了这个问题。我改写了类似下面的内容:
所需的重写:
/dir/ -> /dir.html
实际翻译:
/dir/ -> /dir.html (MultiViews)
/dir.html -> /dir.html/ (mod_rewrite: 404, didn't exist)
禁用MultiView可以保持初始翻译的发生。我本可以调整重写规则来弥补这一点,但我还是没有将MultiView用于其他任何事情。
以下帖子告诉我这个问题: https://velenux.wordpress.com/2012/07/17/apache-mod_rewrite-multiple-add-path-info-postfix/#comment-1476
答案 3 :(得分:1)
在搜索“添加路径信息后缀”时,这个问题首先出现,虽然它最终解决了我的问题,但我花了将近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 - 问题立即得到解决。