![Symfony 重写规则后重写 URL](https://linux22.com/image/733659/Symfony%20%E9%87%8D%E5%86%99%E8%A7%84%E5%88%99%E5%90%8E%E9%87%8D%E5%86%99%20URL.png)
目标是在没有语言环境的 URL 开头添加语言环境“en”。
例子
https://example.com/document/file.php
成为
https://example.com/en/document/file.php
以下规则单独使用时效果很好:
RewriteCond %{REQUEST_URI} !^/[a-z]{2}/
RewriteRule ^(.*) /en/$1 [R=302,L]
问题是我按照 Symfony 规则重写 URL 时遇到困难。
自动确定 RewriteBase 并将其设置为环境变量。
RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$ RewriteRule ^(.*) - [E=BASE:%1]
设置 Apache 删除的 HTTP_AUTHORIZATION 标头
RewriteCond %{HTTP:Authorization} . RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
从 URL 中删除 app.php
RewriteCond %{ENV:REDIRECT_STATUS} ^$ RewriteRule ^app_pre_prod\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L]
将请求的页面添加到索引(例如 index.php/login)
RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^ - [L] RewriteRule ^ %{ENV:BASE}/app.php [L]
我得到的最好的结果是:没有任何改变。
或者通过停用第三条规则并删除最后一条规则的标志[L]
,得到以下结果:
https://example.com/en/app.php/document/file.php