2012-10-27 82 views
1

我想重定向与查询字符串的URL网址没有查询字符串,但是,我想从查询字符串中使用的值。重定向从查询字符串的.htaccess到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

原因,原来的规则将无法正常工作的原因是因为它看起来像你的状态是:

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]标志中的条件使得它如此的正则表达式不区分大小写。

+0

我在使用该代码时收到500错误。下面的代码也在我的htaccess文件中,因为它是WordPress。这是否会导致问题? –

+0

RewriteBase/ 重写规则^指数\ $ .PHP! - [L] 的RewriteCond%{} REQUEST_FILENAME -f 的RewriteCond%{} REQUEST_FILENAME -d 重写规则。的index.php [L],他们需要你的WordPress规则之前去 –

+0

@JonPotts,也需要在规则中添加一个'R = 301'标志(见编辑) –

相关问题