【问题标题】:Redirect all blog posts from %postname% permalink structure to /news/%postname%将所有博客文章从 %postname% 永久链接结构重定向到 /news/%postname%
【发布时间】:2017-03-30 13:30:19
【问题描述】:

我已将我的永久链接更改为自定义结构 /news/%postname% 然而我现在正尝试设置 301 重定向,因此如果有人输入 http://example.com/this-is-my-post 的旧网址,他们将自动重定向到 http://example.com/news/this-is-my-post

我已经成功地为我的自定义帖子类型设置了重定向,因为我使用以下方法将所有帖子从自定义帖子类型“事件”移动到“最新”:

RewriteRule ^events/(.*) http://www.example.com/latest/$1 [R=301,L]

但是我不确定是否可以使用它来重定向主要博客文章而不影响网站页面。

【问题讨论】:

    标签: php wordpress .htaccess redirect mod-rewrite


    【解决方案1】:

    要省略eventslatest 的请求,您必须定义适当的conditionrule 看起来与您已有的相似

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !^/events/
    RewriteCond %{REQUEST_URI} !^/latest/
    RewriteCond %{REQUEST_URI} !^/news/
    RewriteRule ^(.*)$ /news/$1 [R,L]
    

    您也可以将三个排除条件合二为一

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !^/(events|latest|news)/
    RewriteRule ^(.*)$ /news/$1 [R,L]
    

    当一切正常时,您可以将R 替换为R=301 (permanent redirect)。 从不R=301测试。

    【讨论】:

    • 我试过了,但它也在我的网站页面中添加了“新闻”前缀,例如。 www.example.com/this-is-a-page 现在显示为 www.example.com/news/index.php。我的 WordPress 帖子只需要它。页面仍应遵循 postname 永久链接结构
    • 我不确定,如果我真的明白了,但请参阅更新后的答案。如果当前 .htaccess 中还有更多规则,请使用您拥有的规则更新问题。
    【解决方案2】:

    在“设置”>“永久链接”中更改永久链接结构

    from /%post-name%/ 
    
    to /news/%post-name%/
    

    完成新链接结构的设置后,请在代码中尝试此操作,您可能希望将此代码复制粘贴到活动主题的函数文件中。

    https://github.com/devatsemtitans/wp-plugin-snippets/blob/wp_redirect/old-permalinks-redirect

    这段代码的主要作用是缓存来自查询 URL 的帖子的 slug,并检查您的网站中是否存在带有该 slug 的帖子,然后调用特定帖子的永久链接并将您的帖子重定向到新的 URL 结构301 状态码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-31
      • 1970-01-01
      • 1970-01-01
      • 2021-06-30
      • 1970-01-01
      • 2017-09-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多