Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何使用重写apache重定向/到相关的语言文件夹_Regex_.htaccess_Rewrite - Fatal编程技术网

Regex 如何使用重写apache重定向/到相关的语言文件夹

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

基本上,我有一个.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/ [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是协同工作的。