htaccess:将查询字符串重写到路径

时间:2016-09-26 22:07:32

标签: regex .htaccess url-rewriting

我的域名包含以下查询字符串:

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 个答案:

答案 0 :(得分:1)

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

RewriteEngine On

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