Regex 为什么';这难道不是改写301重定向工作吗?

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 (其中两个

其他重写规则也行,所以我把它们替换了,把这个放在第一位。故意破坏它会返回一个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
(其中两个
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工作原理的理解——谢谢!