Regex 如何使用重写apache重定向/到相关的语言文件夹
基本上,我有一个.htaccess文件,包括以下几行Regex 如何使用重写apache重定向/到相关的语言文件夹,regex,.htaccess,rewrite,Regex,.htaccess,Rewrite,基本上,我有一个.htaccess文件,包括以下几行 #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 / 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]
我想基于cookie将/directory重定向到相关的语言文件夹
如果cookie设置为
lang=fr
最后应该是
/fr/
如果cookie设置为
lang=en
最后应该是
/en/
所以我无论如何都不想呆在/
目录下。一旦我使用了规则#1,即使页面重定向到/en/或/fr/,我还是得到了空页面。规则2和规则3非常有效。任何帮助都将不胜感激
#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
中的任意2个字符(字符类中的字符)。相反,这应该是:
RewriteRule ^(en|fr)$ /$1/ [R=301,L]
规则#3也有类似的问题:
此模式中没有$2
反向引用。看起来应该是这样的:
RewriteRule ^(en|fr)/(.*)$ /$2?lang=$1 [L,QSA]
注意,我还为替换添加了一个斜杠前缀
虽然这可能只是工作,但这不是匹配/en
或/fr
的正确模式。您正在匹配e
、n
、|
、f
、r
中的任意2个字符(字符类中的字符)。相反,这应该是:
RewriteRule ^(en|fr)$ /$1/ [R=301,L]
规则#3也有类似的问题:
此模式中没有$2
反向引用。看起来应该是这样的:
RewriteRule ^(en|fr)/(.*)$ /$2?lang=$1 [L,QSA]
请注意,我还为替换添加了斜杠前缀。不,它不起作用。我想规则1还是有问题的。否则,正如我在问题中提到的,规则2和规则3是一起工作的。不,它不起作用。我想规则1还是有问题的。否则,正如我在问题中提到的,规则2和规则3是协同工作的。