其他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,也没有。
我做错了什么?
答案 0 :(得分:2)
RewriteRule
仅指路径,不包括QUERY_STRING
。使用product_id
从QUERY_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是否有详细信息。