将HTACCESS中的查询字符串重定向到URL

时间:2012-10-27 20:05:42

标签: string .htaccess redirect

我正在尝试将带有查询字符串的URL重定向到没有查询字符串的URL,但是,我想使用查询字符串中的值。

在下面的示例中,我使用的是单个状态,但是我希望它是动态的,这意味着它会将任何带有查询字符串的URL解析为一个干净的URL,该URL仍然包含查询字符串中的值。

Example: http://www.mywebsite.com/?state=CA redirects to http://www.mywebsite.com/CA/

我已经厌倦了将以下信息添加到我的HTACCESS文件中,但没有运气:

Options +FollowSymlinks
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /\?state=([a-z]+)&type=([a-z\-]+)
RewriteRule ^ /%1/%2? [L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /\?state=([a-z]+)($|\ )
RewriteRule ^ /%1? [L]

这些已经奏效但我必须输入我想避免的每一个重定向:

RewriteCond %{QUERY_STRING} state=FL
RewriteRule ^$ "http://www.mywebsite.com/fl/?" [R=301,L]
RewriteCond %{QUERY_STRING} state=RI
RewriteRule ^$ "http://www.mywebsite.com/ri/?" [R=301,L]

有什么想法吗?我在Apache上使用WordPress。我相信一切都是最新的。

1 个答案:

答案 0 :(得分:0)

原始规则不起作用的原因是因为您的状态似乎是:

state=FL

FL永远不会匹配正则表达式[a-z]+,因为[a-z]字面意思是任何小写字母,F和L都不是小写字母。尝试:

Options +FollowSymlinks
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /\?state=([a-z]+)&type=([a-z\-]+) [NC]
RewriteRule ^ /%1/%2? [L,R=301]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /\?state=([a-z]+)($|\ ) [NC]
RewriteRule ^ /%1? [L,R=301]

因此条件中的[NC]标志使得正则表达式不区分大小写。