这个规则似乎没有起作用,但是我无法确定原因,对我来说看起来很好:
RewriteRule ^shop_en/proddetail.php?prod=(.+)$ /shop/product/$1 [L,NC,NE,R=301]
它就像它根本没有得到处理,我只是得到我的网站错误消息,说它找不到'proddetail.php'。
这也很奇怪,因为在快速测试中我尝试了以下内容:
RewriteRule ^shop_en/proddetail.php$ /shop/product [L,NC,R=301]
哪个工作正常。那是怎么回事?
修改:我正在使用的产品ID可以包含字母,数字和短划线。
用最简单的术语来说,用最方便的定义:
我想路由任何尝试访问的人:
www.domain.com/shop_en/proddetail.php?prod=333
到以下网址:
www.domain.com/shop/product/333
我该怎么做?
答案 0 :(得分:0)
试试这个
RewriteRule ^/?shop/product/([a-zA-Z0-9\-]+)$ shop_en/proddetail.php?prod=$1 [L,NC,NE,R=301]
答案 1 :(得分:0)
它无效,因为您尝试匹配QUERY_STRING
中的RewriteRule
。您需要RewriteCond
来匹配QUERY_STRING
。
您可以使用:
RewriteCond %{THE_REQUEST} \s/+shop_en/proddetail\.php\?prod=([^&\s]+) [NC]
RewriteRule ^ /shop/product/%1? [L,NE,R=301]
RewriteRule ^shop/product/([^/]+)$ /shop_en/proddetail\.php\?prod=$1 [L,QSA,NC]