我有一些旧的产品页面出现在搜索重新设计的网站上。
旧页面是这样的: www.site.com/mycart/index.php?act=viewProd&productId=34
我有静态页面,我想要这些。
所以我想要
重定向301 /mycart/index.php?act=viewProd&productId=34 http://www.site.com/prod-name1
我知道我不能用“重定向301”来做到这一点,因为它不是一个静态页面。
我想知道解决这个问题的最佳方法。
我需要为每个重定向都有一个规则,因为旧结构和新页面之间没有相关性。
是否有可能只匹配productId = 34
RewriteRule [url contains productId = 34] http://www.site.com/prod-name1? [R = 301,L]
如果这是一个有效的解决方案,我将如何匹配“productId = 34”。
任何帮助将不胜感激。
答案 0 :(得分:1)
您需要使用RewriteCond
来测试查询:
RewriteCond %{QUERY_STRING} ^(&[^&]*)*productId=34(&|$)
RewriteRule ^mycart/index\.php$ /prod-name1? [L,R=301]
之前的^(&[^&]*)*
和(&|$)
之后的productId=34
只是在productId=34
是完整的网址参数时才重写,而不仅仅是productId=34567
的一部分或foobarproductId=34
。
答案 1 :(得分:0)
为什么你不想在这种情况下使用301?这是关于changing dynamic URLs to static URLs的教程。如果您真正重定向到静态页面,则需要外部重定向。如果要保留PHP文件,并希望在其前面放置一个漂亮的URL,则需要进行内部重写,即当请求进入/ prod-name-1时,将其内部路由到/ mycart / index .php?productId = 34,但不发送301。