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

如何解决 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 的第一行更改为:

回显‘测试’;
出口();

但我仍然收到“错误请求”。

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

123.123.123.123 - - [18/Feb/2011:05:38:49 +0000] [my.site.com/sid#7f273d77cb80][rid#7f273da48b28/initial] (2) 使用请求的 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\-\_]+)/$' 应用于 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\-\_]+)/$' 应用于 uri '/'
123.123.123.123 - - [18/Feb/2011:05:38:49 +0000] [my.site.com/sid#7f273d77cb80][rid#7f273da48b28/initial] (1)通过 /
123.123.123.123 - - [18/Feb/2011:05:38:49 +0000] [my.site.com/sid#7f273d77cb80][rid#7f273da5a298/subreq] (2) 使用请求的 uri /Director.php 初始化重写引擎
123.123.123.123 - - [18/Feb/2011:05:38:49 +0000] [my.site.com/sid#7f273d77cb80][rid#7f273da5a298/subreq] (2)重写'/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\-\_]+)/$' 应用于 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\-\_]+)/$' 应用于 uri '-[L,NC]'
123.123.123.123 - - [18/Feb/2011:05:38:49 +0000] [my.site.com/sid#7f273d77cb80][rid#7f273da5a298/subreq] (2)本地路径结果:-[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”

有什么想法吗?我不知道还能尝试什么?

更新:

这是我的虚拟主机配置:

重写引擎开启
RewriteLog“/LiveWebs/mysite.com/rewrite.log”
重写日志级别 5

# 不要重写 Crons 文件夹
ReWriteRule ^/Crons/ - [L,NC]
ReWriteRule ^/phpmyadmin - [L,NC]
ReWriteRule .php$ -[L,NC] # 这就是问题所在!!

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

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

问题出在“ReWriteRule .php$ -[L,NC]”这一行。当我注释掉它时,主页会加载。问题是,如何让以 .php 结尾的 URL 直接通过(而不会破坏主页)?

答案1

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

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

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

当您向 Web 服务器发出请求时/,它将提供第一个找到的页面,其名称在DirectoryIndex指令中列出。如果您DirectoryIndex包含index.php该页面,则很可能该页面实际上被重写规则捕获。

相关内容