应该是一个简单的mod_rewrite规则

时间:2014-03-21 11:02:30

标签: php .htaccess

这个规则似乎没有起作用,但是我无法确定原因,对我来说看起来很好:

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

我该怎么做?

2 个答案:

答案 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]