我现在试图解决这个问题超过两个小时。 我有一个使用.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 / 一个正常。但是当我尝试访问 admin / news / 时,我会看到一个空白页面。 Apache没有显示或记录错误,也没有输出。 admin.php?action = news 工作正常。
服务器上实际存在 sklad / 和 admin / 文件夹。 但当我将admin /文件夹重命名为或时,将最后一个RewriteRule更改为
RewriteRule ^admin123/news/?$ admin.php?action=news
我可以访问 admin123 / news / 。如果它与服务器上存在的实际文件夹有关,那么为什么前五个规则有效?这没有意义。
我没有想法,希望有人帮助......
答案 0 :(得分:2)
是的,它被称为news.php ...我重命名了文件,exerything现在很好,谢谢!不知道这个,非常不明显的错误(或不是?)
这不是一个错误,它听起来像内容协商(通过mod_negotiation)打开,它正在做你不想要的事情。可以通过类型映射或 MultiViews 选项打开协商。类型地图有点明确设置,所以我假设你不知道为什么会发生这种情况,你没有设置一个映射到news.php
的特定类型。所以你可能已经开启了多视图。您可以通过从Options
语句中删除它来关闭它:
# remove this word -----------v
Options Indexes FollowSymLinks Multiviews
这可能是你的htaccess,服务器配置,vhost配置,一些配置包含文件等的任何地方。所以你也可以在你的htaccess文件中明确取消它(只要你没有明确地设置它在同一个文件):
Options -Multiviews
答案 1 :(得分:0)
我不喜欢htaccess和RegExp,但我认为管理员/新闻将属于你的第一个htaccess规则。
RewriteRule ^admin/?$ admin.php
它不会继续你的第二条管理规则:
RewriteRule ^admin/news/?$ admin.php?action=news
我面临同样的问题。
尝试修改你的admin.php,当没有params传递时回显/打印一些东西。像这样:
if($_GET['action'])
{
echo 'With Parameters';
}
else
{
echo 'No Parameters pass';
}
以这种方式调试。