基本上我有.htaccess文件包含以下行;
i_mapping
我想基于cookie
将/目录重定向到相关语言文件夹如果Cookie设置为
#1 / to /en|fr
RewriteCond %{HTTP_COOKIE} lang=([^;]+) [NC]
RewriteRule !^((?!(?:fr|en)).+?)$ /%1/$1 [L,R=301]
#2 add trailing slash /en to /en/ & /fr to /fr/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([en|fr]{2})$ /$1/ [R=301,L]
#3 /en/[index] & /fr/[index]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([en|fr]{2})/$ $2?lang=$1 [L,QSA]
它应该以
结束lang=fr
如果cookie设置为
/fr/
它应该以
结束lang=en
所以我不想留在/en/
目录。一旦我使用规则#1,即使页面重定向到/ en /或/ fr /,我也会得到空页面。规则#2和规则#3效果很好。任何帮助将不胜感激
答案 0 :(得分:0)
#2 add trailing slash /en to /en/ & /fr to /fr/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([en|fr]{2})$ /$1/ [R=301,L]
虽然这可能只是工作,但这不是匹配/en
或/fr
的正确模式。您匹配e
,n
,|
,f
,r
(字符类中的字符)中的任意两个字符)。相反,这应该是:
RewriteRule ^(en|fr)$ /$1/ [R=301,L]
与规则#3类似的问题:
#3 /en/[index] & /fr/[index]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([en|fr]{2})/$ $2?lang=$1 [L,QSA]
此模式中没有$2
反向引用。它看起来应该是这样的:
RewriteRule ^(en|fr)/(.*)$ /$2?lang=$1 [L,QSA]
请注意,我还为替换添加了斜杠前缀。