我正在尝试将所有旧的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
部分,我都希望重写能够正常工作。
答案 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]
不需要单独的条件RewriteCond %{REQUEST_URI} ^/product_info\.php$
- 这部分可以(实际上,应该是,为了更好的性能)移动到RewriteRule。
这足够^cPath=3_72&products_id=129
- 它告诉“当查询字符串STARTS with ...”时。无需包含可选/非重要参数osCsid=([A-Za-z0-9-_]+)
。
此规则将放在网站根文件夹中的.htaccess文件中。如果放在其他地方,可能需要进行一些小的调整。