我现在试图解决这个问题超过两个小时.
我有一个使用.htaccess来管理网址的个人网站.
它看起来像这样:
RewriteEngine on
RewriteBase /
...
RewriteRule ^sklad/?$index.php?action=sklad
RewriteRule ^sklad/user/([0-9]+)?$index.php?action=sklad&user=$1
RewriteRule ^sklad/folder/(.+)?$index.php?action=sklad&folder=$1
RewriteRule ^sklad/file/(.+)?$engine/ajax/sklad.php?file=$1
RewriteRule ^sklad/logout/?$index.php?action=sklad&op=logout
...
RewriteRule ^admin/?$admin.php
RewriteRule ^admin/news/?$admin.php?action=news
前五个工作正常. admin / one工作正常.但是当我尝试访问admin / news /时,我得到一个空白页面. Apache没有显示或记录错误,也没有输出. admin.php?action = news工作正常.
sklad /和admin /文件夹都存在于服务器上.但是当我将admin /文件夹重命名为其他内容时,或者将最后一个RewriteRule更改为类似的内容
RewriteRule ^admin123/news/?$admin.php?action=news
我可以访问admin123 / news /.如果它与服务器上存在的实际文件夹有关,那么为什么前五个规则有效?这没有意义.
我没有想法,希望有人帮助……
最佳答案
Yes, it’s called news.php… I renamed the file and exerything is fine now, thanks! Didn’t know about this, pretty unobvious bug (or not?)
这不是一个错误,听起来像内容协商(通过mod_negotiation)打开,它正在做你不想要的事情.可以通过类型映射或MultiViews选项打开协商.类型地图设置有点明确,所以我假设你不知道为什么会发生这种情况,你没有设置一个映射到news.php的特定类型.所以你可能已经开启了Multiviews.您可以通过从Options语句中删除它来关闭它:
# remove this word -----------v
Options Indexes FollowSymLinks Multiviews
这可能是你的htaccess,服务器配置,vhost配置,一些配置包含文件等的任何地方.所以你也可以在你的htaccess文件中明确取消它(只要你没有在同一个文件中明确设置它) :
Options -Multiviews