如何解决Apache2中的“错误请求”?

我有一个PHP应用程序加载除主页以外的所有url。

访问“ https://my.site.com/ ”会产生“错误的请求”错误消息。 任何其他的URL,例如,“ https://my.site.com/SomePage/ ”工作得很好。 这只是主页不起作用。

所有页面都使用mod_rewrite,并通过一个调度脚本Director.php进行路由。 直接访问Director.php也会产生“错误的请求”错误。

但所有其他的请求都通过Director,而且它们都工作得很好,(不包括主页),所以它不能成为Director.php脚本的问题吗? 或者可以吗?

我在Apache2错误日志中没有看到任何东西,而且在PHP错误日志中没有看到任何PHP错误。 我试过将Director.php的第一行改为:

回声“testing”;
出口();

但是我仍然收到一个“不好的请求”。

这是对主页的请求的重写日志:

 123.123.123.123  -  [18 / Feb / 2011:05:38:49 +0000] [my.site.com/sid#7f273d77cb80][rid#7f273da48b28/initial](2)init请求的uri /
 123.123.123.123  -  [18 / Feb / 2011:05:38:49 +0000] [my.site.com/sid#7f273d77cb80][rid#7f273da48b28/initial](3)应用模式'^ /([a- zA-Z0-9 \  -  \ _] +)/ $'to uri'/'
 123.123.123.123  -  [18 / Feb / 2011:05:38:49 +0000] [my.site.com/sid#7f273d77cb80][rid#7f273da48b28/initial](3)应用模式'^ /([a- zA-Z0-9 \  -  \ _] +)/([a-zA-Z0-9 \  -  \ _] +)/ $'to uri'/'
 123.123.123.123  -  [18 / Feb / 2011:05:38:49 +0000] [my.site.com/sid#7f273d77cb80][rid#7f273da48b28/initial](1)通过/
 (2)init请求的uri / Director重写引擎。 PHP
 123.123.123.123  -  [18 / Feb / 2011:05:38:49 +0000] [my.site.com/sid#7f273d77cb80][rid#7f273da5a298/subreq](2)rewrite'/Director.php' - > ' -  [L,NC]'
 123.123.123.123  -  [18 / Feb / 2011:05:38:49 +0000] [my.site.com/sid#7f273d77cb80][rid#7f273da5a298/subreq](3)应用模式'^ /([a- zA-Z0-9 \  -  \ _] +)/ $'to uri' -  [L,NC]'
 123.123.123.123  -  [18 / Feb / 2011:05:38:49 +0000] [my.site.com/sid#7f273d77cb80][rid#7f273da5a298/subreq](3)应用模式'^ /([a- zA-Z0-9 \  -  \ _] +)/([a-zA-Z0-9 \  -  \ _] +)/ $'to uri' -  [L,NC]'
 123.123.123.123  -  [18 / Feb / 2011:05:38:49 +0000] [my.site.com/sid#7f273d77cb80][rid#7f273da5a298/subreq](2)本地path结果: -  [L,NC ]

Apache2访问日志

 “my.site.com:443 123.123.123.123  -  [18 / Feb / 2011:05:44:19 +0000]”GET / HTTP / 1.1“400 3223” - “”Mozilla / 5.0(X11; U; Linux x86_64 ; en-US; rv:1.9.2.8)Gecko / 20100723 Ubuntu / 10.04(lucid)Firefox / 3.6.8“

有任何想法吗? 我不知道还有什么要尝试?

更新:

这是我的虚拟主机conf:

 RewriteEngine On
 RewriteLog“/LiveWebs/mysite.com/rewrite.log”
 RewriteLogLevel 5

 #不要rewite克朗斯文件夹
 ReWriteRule ^ / Crons /  -  [L,NC]
 ReWriteRule ^ / phpmyadmin  -  [L,NC]
 ReWriteRule .php $  -  [L,NC]#这是问题!

 RewriteCond%{REQUEST_URI}!^ / images / [NC]
 RewriteRule ^ /([a-zA-Z0-9 \  -  \ _] +)/ $ /Director.php?rt=$1 [L,QSA]

 RewriteCond%{REQUEST_URI}!^ / images / [NC]
 RewriteRule ^ /([a-zA-Z0-9 \  -  \ _] +)/([a-zA-Z0-9 \  -  \ _] +)/ $ /Director.php?rt=$1&action=$2 [ L,QSA]

问题是“ReWriteRule .php $ – [L,NC]”这一行。 当我注释掉,主页加载。 现在的问题是,如何让URL实际上以.php结尾(没有打破主页)?

看起来没有任何重写规则匹配/ :在两个重写规则有问题之后,“最小”匹配是/.//././ ,所以这两个没有机会匹配/

您可以在“.php”之前添加一个特定于url https://my.site.com/的重写规则:

  RewriteRule ^/$ /Director.php?rt= [L,QSA] 

当你询问你的networking服务器时,它将服务于在DirectoryIndex指令中列出的名字的第一个页面。 如果你的DirectoryIndex包含index.php那么这个页面可能实际上被重写规则所捕获。