重写规则而不是尝试重定向

时间:2011-09-27 12:44:28

标签: apache .htaccess redirect

我有这个针对Apache的301重定向规则:

RewriteEngine On

RewriteRule ^park.php?park_id=3       http://hiking.comehike.com/outdoors/parks/park.php?park_id=3 [R=301,L]

我想知道这个网址:

http://www.comehike.com/outdoors/parks/park.php?park_id=3

重定向到此网址:

http://hiking.comehike.com/outdoors/parks/park.php?park_id=3

但正如我现在所做的那样,它并没有尝试重定向。带有规则的.htaccess文件位于/ parks /目录中。

我做错了什么吗?似乎这应该是相对直接的。

谢谢!

1 个答案:

答案 0 :(得分:3)

这是查询字符串;你需要添加一个条件才能拿起它,比如:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^park_id=3$
RewriteRule ^park.php http://hiking.comehike.com/outdoors/parks/park.php?park_id=3 [R=301,L]

无论如何,当我把它变成我本地主机上的.htaccess时,它会起作用。

最终可能会更好,因为它的RegExp模式匹配可以执行以下操作:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^park_id=([0-9]+)$
RewriteRule ^park.php http://hiking.comehike.com/outdoors/parks/park.php?park_id=%1 [R=301,L]

这将获取地址末尾的整数并将其传递给新地址(如果当然在原始地址中没有查询字符串,则实际上更容易)。