特定动态页面的mod_rewrite

时间:2009-10-23 16:31:58

标签: mod-rewrite

我有一些旧的产品页面出现在搜索重新设计的网站上。

旧页面是这样的: 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”。

任何帮助将不胜感激。

2 个答案:

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