.htaccess RewriteRule返回一个空白页面

时间:2012-11-05 02:08:31

标签: .htaccess mod-rewrite

我现在试图解决这个问题超过两个小时。 我有一个使用.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 / 。如果它与服务器上存在的实际文件夹有关,那么为什么前五个规则有效?这没有意义。

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

2 个答案:

答案 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';
   }

以这种方式调试。

相关问题