2016-09-26 80 views
1

我有以下查询字符串域:htaccess的:重写查询字符串路径

http://example.com/?taxo=question&cata=foo&catb=bar&catc=more 

我的目标是?taxo=后,这个查询字符串转换成基于对像这样每个参数的值的路径:

http://example.com/questions/cata/foo/catb/bar/catc/more/ 

使用.htaccess,这是我已经试过:

RewriteCond %{QUERY_STRING} 
RewriteRule ^taxo=(.*)&(.*)=(.*)&(.*)=(.*)&(.*)=(.*)$ $1/$2/$3/$4/$5/$6/$7 [L,R=301] 

但是,这并不适合我。我试图了解我的行程错误,因为条件没有得到满足,所以RewriteRule一行。

回答

1

您无法匹配RewriteRule中的查询字符串。您应该使用QUERY_STRING变量在RewriteCond从查询字符串匹配和捕获值:

RewriteEngine On 

RewriteCond %{QUERY_STRING} ^taxo=([^&]+)&([^=]+)=([^&]+)&([^=]+)=([^&]+)&([^=]+)=(.*)$ [NC] 
RewriteRule ^/?$ /%1/%2/%3/%4/%5/%6/%7? [L,R=301] 
  • 请注意,您将需要使用%N语法在RewriteCond捕获的值的反向引用。
  • ?在目标URI的末尾是去掉先前的查询字符串。