最近我使用Apache RewriteEngine(mod-rewrite)尝试重写这个文件:
api.access.php
到这个目录:
/api
使用此RewriteRule:
RewriteRule ^api$ api.access.php [L,QSA]
但它一直都失败了。
奇怪的是,用/api
之类的其他字符串替换/apis
。那问题是什么?
答案 0 :(得分:3)
实际上这不是一个真正的错误。 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。*的文件,并有效地伪造一个类型地图 它命名所有这些文件,为它们分配相同的媒体类型和 如果客户要求其中一个,它将具有内容编码 他们的名字。然后它选择与客户的最佳匹配 要求。
答案 1 :(得分:0)
问题原来是我尝试替换的文件的名称(api.access.php
),因为它始于api
。
将文件名更改为access.api.php
修复它。
希望这对任何人都有用。
干杯