Regex 为什么';这难道不是改写301重定向工作吗?
其他重写规则也行,所以我把它们替换了,把这个放在第一位。故意破坏它会返回一个500错误,因此我确信我的语法是错误的,而不是我的配置 我重新设计了一个站点,该站点以前有如下URL:Regex 为什么';这难道不是改写301重定向工作吗?,regex,apache,mod-rewrite,Regex,Apache,Mod Rewrite,其他重写规则也行,所以我把它们替换了,把这个放在第一位。故意破坏它会返回一个500错误,因此我确信我的语法是错误的,而不是我的配置 我重新设计了一个站点,该站点以前有如下URL: /product_view.asp?product_id=123&images_id=456 /shop/product/123 我的新站点有如下URL: /product_view.asp?product_id=123&images_id=456 /shop/product/123 (其中两个
/product_view.asp?product_id=123&images_id=456
/shop/product/123
我的新站点有如下URL:
/product_view.asp?product_id=123&images_id=456
/shop/product/123
(其中两个123
s与我保存的数据库相同)
我的规则是:
RewriteRule ^product_view.asp\?product_id=([0-9]+).*$ /shop/product/$1 [R=301,L]
但什么都没有发生——没有错误,没有500,什么都没有
我做错了什么?
重写规则
只引用不包括查询字符串
的路径。使用RewriteCond
从QUERY\u STRING
中查找product\u id
RewriteCond %{QUERY_STRING} (?:^|&)product_id=([0-9]+)
RewriteRule ^product_view\.asp$ /shop/product/%1? [R=301,L]
RewriteCond
中的分组部分可以称为%1
。它可用于重写规则
如果将?
置于重写规则
的替换部分末尾,则将丢弃查询字符串
。(如果您的Apache版本是2.4或更高版本,您可以使用QSD
标志。)并不总是需要它,但您可能不喜欢像/shop/product/123?product_id=123&images_id=456这样丑陋的URL
检查细节。可能是因为重写中缺少图像\u id
造成的?我不知道!这实际上完全改变了我对mod_rewrite工作原理的理解——谢谢!