在我的.htaccess我有吨的指令,相同的语法:
RewriteRule ^(.*)/PRODUCT_1.aspx http://www.site.com/product.php?id_product=2891 RewriteRule ^(.*)/PRODUCT_2.aspx http://www.site.com/product.php?id_product=2896
一切正常。 现在,我在我的创build了一个RewriteMap,因为我需要增加速度(20.000redirect301在htaccess不好),所以:
RewriteEngine On RewriteMap redirects dbm=db:/var/www/html/presta152/prestashop/redirects.db RewriteCond ${redirects:$1} !="" RewriteRule ^(.*)$ ${redirects:$1} [redirect=permanent,last]
而我的redirects.db由redirects.txt创build,其中包含:
/PRODUCT_1.aspx http://www.site.com/product.php?id_product=2891 /PRODUCT_2.aspx http://www.site.com/product.php?id_product=2896
这工作,如果我尝试打电话为例:www.site.com/PRODUCT_1.aspx我redirect…但如果我尝试打电话www.site.com/everythingpossibileinside/PRODUCT_1.aspxredirect不起作用。 所以,在我的.htaccess这个规则:
RewriteRule ^(.*)/PRODUCT_1.aspx http://www.site.com/product.php?id_product=2891
工程,但在我的RewriteMap号。 我想我必须改变这个指示:
RewriteRule ^(.*)$ ${redirects:$1} [redirect=permanent,last]
我尝试了,但没有成功。 谢谢大家。
你需要像这样修改RewriteRule:
RewriteRule (/[^/]*)$ ${redirects:$1} [redirect=permanent,last]
regexp(/ [^ /] *)$将与前面的反斜杠的整个URI中的“filename”匹配…然后RewriteCond将会发生并testingredirect映射中是否有这样的翻译 – 如果是这样,redirect会发生。
实际上,在mod_rewrite中处理请求的顺序有点违反直觉:-)