2012-11-05 283 views
4

我试图解决这个问题超过两个小时了。 我有一个使用.htaccess来管理网址的个人网站。 它看起来像这样:.htaccess RewriteRule返回空白页

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/工作正常。但是当我尝试访问时,我收到一个空白页。 Apache没有显示或记录错误,并且没有输出。 admin.php?action = news工作正常。

sklad/admin/文件夹物理上存在于服务器上。 当我管理/文件夹重命名为其他的最后一个重写规则更改为类似

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

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

我的想法,希望这里有人可以帮助...

+1

是否有一个文件以'/ admin /'文件夹? –

+0

是的,它被称为news.php ...我重命名了文件,现在很好,谢谢!不知道这个,很不明显的错误(或不是?) – Afftamat

回答

2

是的,它被称为news.php ...我重命名文件和exerything现在是好的,谢谢!不知道这个,很不明显的错误(或不?)

这不是一个错误,它听起来像内容谈判(通过mod_negotiation)打开,它正在做你不想要的东西。协商可以通过类型图或MultiViews选项打开。 Typemaps有点显式设置,所以我假设你既然不知道为什么发生这种情况,你还没有设置映射到news.php的特定类型。所以你可能已经打开了多视图。您可以通过从Options语句中删除它关掉它:

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

这可以在任何地方,在你的htaccess,服务器配置,虚拟主机的配置,一些配置包括文件等。所以你也可以在你的htaccess文件中明确地取消设置(只要你没有明确地将它设置在同一个文件中):

Options -Multiviews 
+0

在我的.htaccess中将'-Multiviews'添加到'Options',并解决了问题。谢谢! – Afftamat

0

我不是好与htaccess以及正则表达式,但我认为管理/新闻会落入你的第一个htaccess的规则。

RewriteRule ^admin/?$ admin.php 

它不会继续上管理你的第二个规则是:

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

它我正面临前同样的问题。

试着修改你的admin.php,echo /打印一些东西,当没有参数传递。类似这样的:

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

调试它的方式。

+0

没有任何'$ _GET ['action']'defined - meta,header,登录表单(如果没有活动会话)或欢迎页面和页脚... – Afftamat