【问题标题】:Found bug using Apache mod_rewrite使用 Apache mod_rewrite 发现错误
【发布时间】:2015-04-27 17:56:10
【问题描述】:
最近我使用 Apache RewriteEngine (mod-rewrite) 尝试重写这个文件:
api.access.php
到这个目录:
/api
使用这个重写规则:
RewriteRule ^api$ api.access.php [L,QSA]
但它一直失败。
奇怪的是,用 /apis 之类的其他字符串替换 /api 有效。那么问题出在哪里?
【问题讨论】:
标签:
apache
.htaccess
mod-rewrite
【解决方案1】:
实际上,这并不是真正的错误。 Apache 经过很长时间的良好测试。您可能遇到的是content Negotiation 和MultiViews. 这可能会引起一些有趣的事情。
因此,您的回答确实对任何人都没有帮助,因为更改文件名不是解决方案。您可能只需要禁用MultiViews。
Options -MultiViews
RewriteEngine on
RewriteRule ^api/?$ api.access.php [L,QSA]
更多关于MultiViews
MultiViews 的效果如下:如果服务器收到一个
请求 /some/dir/foo,如果 /some/dir 启用了 MultiViews,并且
/some/dir/foo 不存在,则服务器读取目录
查找名为 foo.* 的文件,并有效地伪造类型映射
它命名所有这些文件,为它们分配相同的媒体类型和
如果客户要求其中之一,它将具有的内容编码
他们的名字。然后它选择与客户的最佳匹配
要求。
【解决方案2】:
问题原来是我试图替换的文件的名称 (api.access.php),因为它以 api 开头。
将文件名更改为access.api.php 修复了它。
希望这对那里的任何人都有用。
干杯