假设我的网址包含以下查询字符串参数:
/index.php?book=DesignPatterns&page=139
/index.php?book=Refactoring&page=285
使用mod_rewrite,如何将它们重定向到像这样的SES网址?
/DesignPatterns/139
/Refactoring/285
答案 0 :(得分:100)
RewriteCond %{QUERY_STRING} book=(\w+)&page=(\d+)
RewriteRule ^index.php /%1/%2? [L,R=301]
由于RewriteRule仅查看路径(最多但不包括问号),因此请使用RewriteCond捕获查询字符串中的值。
请注意,RewriteCond
中的匹配项已在%1
中捕获,
%2
等,而不是$1
,$2
等
另请注意?
末尾的RewriteRule
。它告诉mod_rewrite
不要将原始查询字符串附加到新URL,因此您最终会使用
/DesignPatterns/151
intead of
/DesignPatterns/151?book=DesignPatterns&page=151
。
[L,R=301]
标志做两件事:
L
确保不会处理其他可能匹配的规则(换句话说,它确保这是处理的“最后”规则)。R=301
会导致服务器发回重定向响应。
它不是重写,而是告诉客户再次使用新的
URL。 =301
使其成为permanent redirect,因此除其他外,搜索引擎会知道用其索引中的新网址替换旧网址。