我正在尝试将带有查询字符串的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。我相信一切都是最新的。
答案 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]
标志使得正则表达式不区分大小写。