.htaccess RewriteRule返回一个空白页面

我现在试图解决这个问题超过两个小时.

我有一个使用.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
点赞