旧URL的重写规则重定向到带有查询字符串的新URL

时间:2014-08-06 21:27:32

标签: 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]

如您所见,该网站是多语言的(site.com/fr/,site.com/uk/,...)

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

你知道为什么吗?

非常感谢你的帮助

2 个答案:

答案 0 :(得分:0)

更改规则的顺序,以便在重写规则之前保留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]

答案 1 :(得分:0)

重定向您的原因是RewriteRule

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

它说的是第一个捕获组(第一组括号)中的任何内容,将新URL添加为$ 1,将第二个捕获组(第二组括号)放在URL的开头,前面是{ {1}}

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

http://httpd.apache.org/docs/current/rewrite/flags.html#flag_l