【问题标题】:mod_rewrite for specific dynamic pages特定动态页面的 mod_rewrite
【发布时间】:2009-10-23 16:31:57
【问题描述】:

我在搜索重新设计的网站时显示了一些旧产品页面。

旧页面是这样的: 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 包含 productId=34] http://www.site.com/prod-name1? [R=301, L]

如果这是一个有效的解决方案,我将如何匹配“productId=34”。

任何帮助将不胜感激。

【问题讨论】:

  • 您打算如何让 mod_rewrite 了解产品 ID 与每个产品名称的关系?
  • 该部分已在 CMS 中处理。这是一个不同的购物车解决方案,我想将一些产品从旧 CMS 重定向到新 CMS 上的相应页面。所以说清楚,我只想知道如何做我上面提到的。到达 www.site.com/prod-name1 后发生的事情已经由 CMS 处理。

标签: mod-rewrite


【解决方案1】:

您需要使用RewriteCond 来测试查询:

RewriteCond %{QUERY_STRING} ^(&[^&]*)*productId=34(&|$)
RewriteRule ^mycart/index\.php$ /prod-name1? [L,R=301]

^(&[^&]*)* 之前的(&|$) productId=34 之后的(&|$) 只是在productId=34 是一个完整的 URL 参数而不是像 productId=34567foobarproductId=34 这样的参数的一部分时才重写。

【讨论】:

  • 我最终使用了这个(在我看到你的答案之前): RewriteCond %{QUERY_STRING} .*productId=34.* RewriteRule (.*) site.com/view/product-name?我觉得你的解决方案更健壮,也许更正确。
【解决方案2】:

在这种情况下,您为什么不想使用 301?这是changing dynamic URLs to static URLs 的教程。如果您真的要重定向到静态页面,则需要外部重定向。如果您要保留 PHP 文件,并希望在其前面放置一个漂亮的 URL,您希望进行内部重写,即当请求 /prod-name-1 时,将其内部路由到 /mycart/index .php?productId=34,但不要发送 301。

【讨论】:

  • 请重新阅读上述cmets。我确实想使用 301 重定向。我宁愿只使用重定向 301 oldpage newsite.com/product-name 但不幸的是,旧的购物车结构得到了动态页面的索引? url 中的标记,apache 重定向不会处理这些。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多