重写htaccess旧的oscommerce链接

时间:2011-07-19 11:01:48

标签: .htaccess rewrite

我正在尝试将所有旧的oscommerce链接重写为新网站。但我遇到了需要重写的部分网址的问题。

链接如下所示:

http://www.domain.com/product_info.php?cPath=3_72&products_id=129&osCsid=6j3iabkldjcmgi3s1344lk1285

此重写适用于上述链接:

RewriteCond %{REQUEST_URI}  ^/product_info\.php$
RewriteCond %{QUERY_STRING} ^cPath=3_72&products_id=129&osCsid=([A-Za-z0-9-_]+)$
RewriteRule ^(.*)$ http://www.domain.com/apple/air.html? [R=301,L]

但不适用于:

http://www.domain.com/product_info.php?cPath=3_72&products_id=129

我的问题是,无论是否包含&osCsid=6j3iabkldjcmgi3s1344lk1285部分,我都希望重写能够正常工作。

2 个答案:

答案 0 :(得分:3)

我认为你可以通过不指定结束分隔符($)

来实现这一点

尝试一下:

RewriteCond %{REQUEST_URI}  ^/product_info\.php$
RewriteCond %{QUERY_STRING} ^cPath=3_72&products_id=129
RewriteRule ^(.*)$ http://www.domain.com/apple/air.html? [R=301,L]

通过不将$放在正则表达式字符串的末尾,你基本上是这样说:匹配任何以...开头的字符串,无论后面是什么

希望这会有所帮助:)

答案 1 :(得分:1)

这应该做得很好:

RewriteCond %{QUERY_STRING} ^cPath=3_72&products_id=129
RewriteRule ^product_info\.php$ http://www.domain.com/apple/air.html? [R=301,L]
  1. 不需要单独的条件RewriteCond %{REQUEST_URI} ^/product_info\.php$ - 这部分可以(实际上,应该是,为了更好的性能)移动到RewriteRule。

  2. 这足够^cPath=3_72&products_id=129 - 它告诉“当查询字符串STARTS with ...”时。无需包含可选/非重要参数osCsid=([A-Za-z0-9-_]+)

  3. 此规则将放在网站根文件夹中的.htaccess文件中。如果放在其他地方,可能需要进行一些小的调整。