我怎样才能匹配查询stringvariables与mod_rewrite?
假设我有这样的查询string参数的URL:
/index.php?book=DesignPatterns&page=139 /index.php?book=Refactoring&page=285
使用mod_rewrite ,我如何将它们redirect到这样的SES URL?
/DesignPatterns/139 /Refactoring/285
RewriteCond %{QUERY_STRING} book=(\w+)&page=(\d+) RewriteRule ^index.php /%1/%2? [L,R=301]
由于RewriteRule只查看path(最多但不包括问号),使用RewriteCond来捕获查询string中的值。
请注意,来自RewriteCond
的匹配被捕获在%1
, %2
等中,而不是$1
, $2
等。
还要注意?
在RewriteRule
的最后。 它告诉mod_rewrite不要将原始的查询string追加到新的URL中,所以你最终得到/DesignPatterns/151?book=DesignPatterns&page=151
。
[L,R=301]
标志做两件事:
-
L
确保不会处理其他可能匹配的规则(换句话说,它确保这是处理的“最后”规则)。 -
R=301
使服务器发回一个redirect响应。 它不会重写,而是告诉客户端再次尝试使用新的URL。=301
使它成为一个永久性的redirect ,所以search引擎会知道用他们的索引中的新URLreplace旧的URL。