Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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 使用查询字符串重写旧url重定向到新url的规则_Regex_Apache_.htaccess_Mod Rewrite_Redirect - Fatal编程技术网

Regex 使用查询字符串重写旧url重定向到新url的规则

Regex 使用查询字符串重写旧url重定向到新url的规则,regex,apache,.htaccess,mod-rewrite,redirect,Regex,Apache,.htaccess,Mod Rewrite,Redirect,我徒劳地试图弄明白我的重定向为什么不能正常工作。以下是我的htaccess文件的示例: ## activate rewriting engine RewriteEngine on ## folders of languages RewriteRule ^([a-z]{2})/(.*)$ /$2?tld=$1 [QSA,L] ## redirections RewriteRule ^store/category1/category2/$ /store/category2/ [R=301,L]

我徒劳地试图弄明白我的重定向为什么不能正常工作。以下是我的htaccess文件的示例:

## activate rewriting engine
RewriteEngine on

## folders of languages
RewriteRule ^([a-z]{2})/(.*)$ /$2?tld=$1 [QSA,L]

## redirections
RewriteRule ^store/category1/category2/$ /store/category2/ [R=301,L]
如您所见,该网站是多语言的(site.com/fr/,site.com/uk/,…)

当我输入网址site.com/fr/store/category1/category2/时,它会将我重定向到site.com/store/category2/?tld=fr

你知道为什么吗


非常感谢您的帮助

在重写规则之前更改规则的顺序以保留
R
规则:

## activate rewriting engine
RewriteEngine on

## redirections
RewriteRule ^store/category1/category2/$ /store/category2/ [R=301,L]

## folders of languages
RewriteRule ^([a-z]{2})/(.*)$ /$2?tld=$1 [QSA,L]

它重定向您的原因是因为此
重写规则

RewriteRule ^([a-z]{2})/(.*)$ /$2?tld=$1 [QSA,L]
也就是说,无论第一个捕获组(第一组括号)中有什么,都将其作为$1添加到新URL中,第二个捕获组(第二组括号)放在URL开头,前面加上
/

您在该规则上使用了
L
标志,因此它是该规则集中Apache检查的最后一条规则:


感谢阿努巴瓦的帮助和回答。事实上,我通过尝试不同的重定向和规则来“玩”htaccess文件,并提出了您的解决方案。但在某些情况下,它仍然使用?tld=fr重定向在某些情况下,解决方案是使用如下规则:RewriteRule^([a-z]{2})/store/category1/category2/$/$1/store/category2/[R=301,L]你认为这是一个好的解决方案吗?:)是的,这条规则看起来不错。只需确保新规则低于上一条规则。好的,谢谢,顺便问一下,[R=301,L]和[L,R=301]之间有区别吗?实际上它们都是一样的。如果答案正确,你可以点击我答案左上角的勾号,将答案标记为已接受。请回答最后一个问题。我有其他的目录重写规则,例如,所有这些规则都必须在重写规则^([a-z]{2})/(.*)$/$2?tld=$1[QSA,L]?谢谢Alex的帮助:)解决方案是更改重定向的顺序…)