我想从 URL 中剥离语言代码并保存此代码,以便可以通过 $_SERVER 变量或 $_GET 在 PHP 中访问它。网站网址如下:
http://www.example.com/dir%20ectory/dynamic/url/
http://www.example.com/dir%20ectory/EN/dynamic/url/
而目录名称作为环境变量存储在 htaccess 中的“PATH”中。
# Set PATH variable
RewriteRule .* - [E=PATH:/dir\ ectory]
# Using belows method, remove the Language code, and save it to LANG
RewriteRule ^%{ENV:PATH}/([a-zA-Z]{2})/(.*)$ %{ENV:PATH}/$2 [E=LANG:$1]
# Do some more stuff, all working fine (even w/o the above rewrite)
#....
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond $1 !^index.php [NC]
RewriteRule ^(.*)$ %{ENV:PATH}/index.php?path=$1&lang=%{ENV:LANG} [L]
第 5 行的重写逻辑将语言代码保存到 %{ENV:LANG},尽管 lang 的 $_GET 值为空。此外,通过以下方式请求的图像(和其他静态内容):
http://www.example.com/dir%20ectory/EN/static/img.png
不在页面上显示,这意味着图像 URL 由第 12 行处理,而不是第 10 行(这是有道理的,因为我使用了未重写的 %{REQUEST_FILENAME})。我想知道我在使用 %{ENV:LANG} 时做错了什么以及如何从 %{REQUEST_FILENAME} 中删除语言代码。
更新:语言被存储,但不是以语言代码结尾的 URL。为 (.*) 编辑 (.+)