为什么我的重写规则导致“400:错误的请求”?

我的网站configuration中有这些重写规则:

RewriteEngine on RewriteRule ^app.php - [L] RewriteRule ^(.*)$ app.php$0 [L] 

目标是所有的请求应该被附加到前端控制器“app.php”。 规则的最后一行导致我的服务器以“400:错误的请求”响应,无论我尝试什么path,甚至是空path。 我已经启用了重写日志,并尝试了两个path:“/”和“/ login”。 这是日志说:

  (2)init请求的uri /
 (3)将模式'^ app.php'应用于uri'/'
 (3)将模式'^(。*)$'应用于uri'/'
 (2)重写'/' - >'app.php /'
 (2)本地path结果:app.php /
 (2)用请求的uri / login初始化重写引擎
 (3)将模式'^ app.php'应用于uri'/ login'
 (3)将模式'^(。*)$'应用于uri'/ login'
 (2)重写'/ login' - >'app.php / login'
 (2)本地path结果:app.php / login 

根据日志,它应该成功。 如果我删除重写规则的最后一行,并访问URL“app.php / login”,那么它按预期工作。

有没有人知道为什么这不起作用?


注意:错误日志中没有错误。
注意:当最后的重写规则被删除时,结果path(“app.php /”,“app.php / login”)完美地工作。

我想到了。 出于某种原因,我不得不在重写path中添加“/”:

 RewriteRule ^(.*)$ /app.php$0 [L] 

否则,显然,任何path将被重写为:

 example.comapp.php/ 

我有另一台服务器与相同的Apache版本没有发生,所以我仍然困惑,但至less它的作品。