4

我正在尝试解决这个问题两个多小时。我有一个使用 .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/news/时,我得到一个空白页。Apache 没有显示或记录错误,也没有输出。admin.php?action=news工作正常。

sklad /admin/文件夹都实际存在于服务器上。但是当我将 admin/ 文件夹重命名为其他名称将最后一个 RewriteRule 更改为类似

RewriteRule ^admin123/news/?$ admin.php?action=news

我可以访问admin123/news/。如果它与服务器上存在的实际文件夹有关,那么为什么前五个规则有效?这没有意义。

我没有想法,希望这里有人帮助......

4

2 回答 2

2

是的,它叫做 news.php ......我重命名了文件,现在 exerything 很好,谢谢!不知道这个,非常不明显的错误(或不是?)

这不是错误,听起来内容协商(通过 mod_negotiation)已打开,并且正在做您不想要的事情。可以通过类型映射或MultiViews选项打开协商。类型映射的设置有点明确,所以我假设由于您不知道为什么会发生这种情况,因此您没有设置映射到news.php. 所以你可能已经打开了Multiviews 。Options您可以通过从语句中删除它来关闭它:

#  remove this word -----------v
Options Indexes FollowSymLinks Multiviews

这可以在任何地方,在您的 htaccess、服务器配置、vhost 配置、某些配置包含文件等中。因此您也可以在您的 htaccess 文件中显式取消设置它(只要您没有在同一个文件中显式设置它) :

Options -Multiviews
于 2012-11-05T09:54:46.393 回答
0

我对 htaccess 和 RegExp 不太擅长,但我认为 admin/news 将属于您的第一个 htaccess 规则。

   RewriteRule ^admin/?$ admin.php

它不会继续执行您在管理员上的第二条规则,即:

   RewriteRule ^admin/news/?$ admin.php?action=news

它与我之前面临的问题相同。

尝试修改您的 admin.php,在没有参数传递时回显/打印一些东西。像这样的东西:

   if($_GET['action'])
   {
        echo 'With Parameters';
   }
   else
   {
       echo 'No Parameters pass';
   }

就是这样调试的。

于 2012-11-05T03:48:24.983 回答