l0b*_*0b0 5 apache cookies .htaccess mod-rewrite apache2
我正在尝试在.htaccess中实现语言切换,现在唯一剩下的就是处理不支持cookie的客户端.为此,我必须prefer-language在用户单击带language参数的链接时进行设置.
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} (?:^|&)language=(en|fr|no)
RewriteRule ^(.*)$ $1? [cookie=language:%1:.example.com,env=language:%1,R]
SetEnv prefer-language $language
Run Code Online (Sandbox Code Playgroud)
问题出在最后一行 - 该值始终设置为空.如果我硬编码它会起作用,但如果我尝试引用变量则不行.在这种情况下是否有一些特殊的语法来引用环境变量,还是有其他一些设置方法prefer-language?
编辑:交叉发布到Apache用户列表.
您也可以使用mod_rewrite设置环境变量.实际上,你已经这样做了(见env/ Eflag).
我自己无法使用mod_negotiation测试它,但以下应该可以工作并设置prefer-language:
RewriteCond %{QUERY_STRING} ^((?:[^&]&)*)language=(en|fr|no)&?([^&].*)?$
RewriteRule ^ %{REQUEST_URI}?%1%3 [L,CO=language:%2,R]
RewriteCond %{HTTP_COOKIE} (^|[,\s])language=([^\s,;]+)
RewriteRule ^ - [L,E=prefer-language:%2]
SetEnvIf REDIRECT_prefer-language (.+) prefer-language=$1
Run Code Online (Sandbox Code Playgroud)
但是如果将语言标识符放入URL路径中会更容易/en/…:
SetEnvIf Request_URI ^/(en|fr|no)/ prefer-language=$1
SetEnvIf REDIRECT_prefer-language (.+) prefer-language=$1
Run Code Online (Sandbox Code Playgroud)
我不知道你是否需要额外的/第二个SetEnvIf变量.
| 归档时间: |
|
| 查看次数: |
11362 次 |
| 最近记录: |