【问题标题】:Changing WordPress URL structure while maintaing the proper 301 redirects with mod_rewrite更改 WordPress URL 结构,同时使用 mod_rewrite 保持正确的 301 重定向
【发布时间】:2010-10-12 19:43:59
【问题描述】:

我目前有一个使用 WordPress 的博客,使用如下 URL:

www.domain.com/blog/?pid=384092817

这是在我对任何事情一无所知之前。现在那里有大量内容,我想将我的 URL 结构更改为:

www.domain.com/my-post-title-384092817

有没有办法设置我的 .htaccess 和 mod 重写,所以当用户转到第一个 url 时,他们会得到 301 重定向到第二个 URL?我知道将我的 WordPress 地址 (URL) 设置从 www.domain.com/blog 更改为 www.domain.com 并将我的永久链接设置更改为 /%postname%-%post_id%,但是我如何告诉旧 URL 重定向到新的?

【问题讨论】:

    标签: php wordpress .htaccess


    【解决方案1】:

    你的意思是说当用户访问第二个 URL 时,它会被重写为第一个?这可以通过

    RewriteRule /blog/.+-(\d+)$ /blog/?pid=$1
    

    如果您想将 301 重定向从旧 URL 发送到新 URL,那么您无法使用 .htaccess 文件真正做到这一点。原因是 Apache 的 mod_rewrite 无法访问您帖子的标题,因此它不知道在 URL 中插入什么标题。您必须使用 PHP 进行重定向。

    编辑:你知道吗,实际上这并不完全正确。您可以使用RewriteMap directive 做一些非常疯狂的事情,例如指示 Apache 要求任意程序执行重写,这样您可以拥有一个 PHP 脚本来执行某些操作数据库工作以确定标题是什么,并据此适当地重写 URL。但这似乎是一种过于复杂的解决方案,我不建议这样做 - 直接从 PHP 发送重定向会更干净、更容易。

    【讨论】:

    • 我需要这个网址:/blog/?pid=234 到 301 重定向到这个网址:/my-post-title-234
    • 我猜我一开始误解了你的问题,但看看我编辑的答案:基本上你不能(或至少不应该)用 mod_rewrite 做到这一点。
    • 简化版怎么样?从 /blog/?pid=123 到 /index.php?p=123 然后让 WordPress 处理其余的...
    【解决方案2】:

    根据您的 WP 版本,您可以只使用 Permalink redirect plugin -- 应该在 WordPress 中为您解决问题,而无需 mod_rewrite。然而,从 WordPress 2.3 开始,很多 should work automatically。此时,您唯一需要做的就是将所有 /blog/... 请求重定向到路由,您可以通过 mod_rewrite 大致如下所示:

    RewriteRule ^blog(.*) $1 [QSA]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-28
      • 1970-01-01
      • 2016-05-05
      • 2014-10-04
      • 2013-08-11
      • 2013-08-19
      • 2011-06-18
      相关资源
      最近更新 更多