【问题标题】:How to redirect old "ugly" urls to seo-friendly ones?如何将旧的“丑陋”网址重定向到对 seo 友好的网址?
【发布时间】:2010-12-11 02:09:51
【问题描述】:

我是 mod_rewrite 的新手,需要为我的客户做点什么。

假设我有 www.mydomain.com/products.php?prod_id=32。

这个产品有一个部分(衣服)和一个名字(衬衫)。这些名称和部分是唯一的。

在 SEO 友好的 URL 中,它应该是 www.mydomain.com/products/clothes/shirt/。

我知道我可以创造

RewriteRule ^products/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ products.php?section=$1&name=$2

我可以做到,而且很有效。但我希望输入 www.mydomain.com/products.php?prod_id=32 的人被重定向到 www.mydomain.com/products/clothes/shirt/ (在浏览器本身中更改)。如果不在我的 url 中插入 id,我怎么能做到这一点?是否可以在我的 .htaccess 中调用“预处理”php 文件,并重新创建“products.php?section=$1&name=$2”?

谁有关于mod_rewrite的详细解释的好链接?

谢谢!

【问题讨论】:

    标签: php mod-rewrite seo


    【解决方案1】:

    您可能遇到的问题比mod_rewrite 可以优雅地处理更大。您还可以使用 PHP 将重定向返回到浏览器。这样你就可以访问你的数据库来确定 product_id 32 是 /clothes/shirts/

    【讨论】:

    • 我想我理解了您的解决方案:创建一个匹配“products.php?prod_id=32”的正则表达式,例如重定向到“fix_old_url.php?prod_id=32”。在 fix_old_url.php 中,我使用此 ID 从查询中提取“衣服”和“衬衫”。在此之后,我在 php 中重定向到 /clothes/shirts/。从 SEO 的角度来看,使用 PHP 重定向而不是 apache 重定向有区别吗?
    • 浏览器(或搜索机器人)将从任一重定向中看到相同的内容。你无法从服务器外部得知你是如何实现它的。
    • 我也在尝试理解流程......假设它是一个用户。浏览器 -> products.php?prod_id=32 -> apache -> fix_old_url.php -> 浏览器 -> apache -> /products/clothes/shirt/ -> products.php?prod_id=32。对吗?
    • 我不明白你的最后一步。为什么 /products/clothes/shirt/ 会转到 products.php?prod_id=32。那将再次开始整个循环,您将有一个无限循环。我以为你有 /products/clothes/shirt 的本地处理程序。
    【解决方案2】:

    除了在 PHP 中执行之外,我没有其他选择。

    您可以在 products.php 页面的顶部添加一些内容,检查 URL ($_SERVER['REQUEST_URI']) 以查看它是否包含 products.php - 如果包含,则重定向此人。在重定向之前,您需要查询您的数据库以找出产品类别和名称。

    记得设置 Moved Permanently 标题以进一步改善 SEO :)

    【讨论】:

    • 感谢您的意见。我想避免在我的 php 文件中插入重定向逻辑,我认为 Ned Batchelder 的方法更好。谢谢!
    【解决方案3】:

    此数据可能由浏览器通过“Referer”标头字段传递。您可以推进该 url 并查看 get 参数。如果我没记错的话,并非所有浏览器都支持此功能。

    【讨论】:

      【解决方案4】:

      在 products.php 的顶部(或您想要重定向的任何页面)您可以放置​​一个函数调用

      redirectToSeoUrl();
      

      然后在你的一个包含文件中编写一个redirectToSeoUrl 函数来获取新的url 并重定向。确保在将任何内容输出到浏览器之前放置代码。

      【讨论】:

        【解决方案5】:

        阿帕奇?尝试 .htaccess 重定向。不需要 mod_rewrite。

        示例: 重定向301 /oldpage.html http://www.example.com/newpage.html

        【讨论】:

        • 嗯。我会给你一个 -1 使用表情符号。
        • .htaccess 比在服务器端 mod_rewrite 中配置占用更多的 CPU 资源和速度。
        • Murvinlai - 这是一个更好的回应。任何保持资源低的事情都是一件好事。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-06
        • 1970-01-01
        • 2011-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多