为什么这个mod_rewrite 301重定向不起作用?

时间:2012-12-14 11:47:07

标签: regex apache mod-rewrite

其他RewriteRules工作,所以我已经替换了那些,并把它放在第一位。故意管理它会导致500错误,因此我确信我的语法错误,而不是我的配置。

我重新设计了一个曾经拥有以下网址的网站:

/product_view.asp?product_id=123&images_id=456

我的新网站包含以下网址:

/shop/product/123

(其中两个123与我保持相同的数据库相同)

我的RewriteRule是:

RewriteRule ^product_view.asp\?product_id=([0-9]+).*$ /shop/product/$1 [R=301,L]

但没有任何反应 - 没有错误,没有500,也没有。

我做错了什么?

1 个答案:

答案 0 :(得分:2)

RewriteRule仅指路径,不包括QUERY_STRING。使用product_idQUERY_STRING查找RewriteCond

RewriteCond %{QUERY_STRING} (?:^|&)product_id=([0-9]+)
RewriteRule ^product_view\.asp$ /shop/product/%1? [R=301,L]

RewriteCond中的分组部分可以称为%1。它可以在RewriteRule中使用。

如果?位于RewriteRule替换部分的末尾,则QUERY_STRING将被丢弃。 (如果你的Apache版本是2.4或更高版本,你可以使用QSD标志。)并不总是需要它,但也许你不喜欢像/shop/product/123?product_id=123&images_id=456这样丑陋的URL。

检查mod_rewrite document是否有详细信息。