我的站点配置中有这些重写规则:
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”)工作正常。
我想到了。出于某种原因,我不得不在重写路径中附加一个“/”:
否则,显然,任何路径都会重写为:
我有另一台具有相同 Apache 版本的服务器,但没有发生这种情况,所以我仍然感到困惑,但至少它可以工作。