我的站点配置中有以下重写规则:
RewriteEngine on
RewriteRule ^app.php - [L]
RewriteRule ^(.*)$ app.php$0 [L]
目标是所有请求都应附加到前端控制器“app.php”。规则的最后一行导致我的服务器响应“400:错误请求”,无论我尝试什么路径,即使是空路径。我已启用重写日志并尝试了两个路径:“/”和“/login”。日志内容如下:
(2)使用请求的 uri 初始化重写引擎 / (3)将模式 '^app.php' 应用于 uri '/' (3)将模式 '^(.*)$' 应用于 uri '/' (2)重写 '/' -> 'app.php/' (2)本地路径结果:app.php/ (2)使用请求的 uri /login 初始化重写引擎 (3)将模式 '^app.php' 应用于 uri '/login' (3)将模式 '^(.*)$' 应用于 uri '/login' (2)重写 '/login' -> 'app.php/login' (2)本地路径结果:app.php/login
根据日志,它应该会成功。如果我删除重写规则的最后一行并访问 URL“app.php/login”,那么它就会按预期工作。
有人知道为什么这不起作用吗?
笔记:错误日志中没有错误。
笔记:当最后的重写规则被删除时,生成的路径(“app.php/”、“app.php/login”)可以完美运行。
答案1
我找到了答案。出于某种原因,我不得不在重写路径后附加一个“/”:
RewriteRule ^(.*)$ /app.php$0 [L]
否则,显然任何路径都会重写为:
example.comapp.php/
我有另一台具有相同 Apache 版本的服务器,但这种情况没有发生,所以我仍然感到困惑,但至少它可以工作。