【问题标题】:rewrite rule wordpress custom url重写规则 wordpress 自定义 url
【发布时间】:2013-10-06 09:45:11
【问题描述】:

我为我编写了一个旧网站,现在我已将其迁移到 wordpress,但许多网站仍有指向旧网址的链接,我想将它们重定向到 Wordpress,因为有 404 响应。

旧结构是:http://www.website.com/news/2013/june/01/slug-slug-slug-slug wordpress 中的新功能:http://www.website.com/news/2013/06/01/slug-slug-slug

请注意,我只需要更改:

january -> 01
february -> 02
march -> 03
april -> 04
may -> 05
june -> 06
july -> 07
august ->08
september -> 09
october -> 10
november -> 11
december -> 12

我必须在 wordpress 的 .htaccess 或 rewrite.php 文件中包含一些内容吗?我一直在想我只需要将 %monthday% 变量从数字更改为字符串...但是如果我更新 wordpress 我可能需要再次更改它。

【问题讨论】:

    标签: wordpress .htaccess mod-rewrite redirect


    【解决方案1】:

    如果你想使用 mod_rewrite,你可以用 12 条规则来做到这一点。我不熟悉 wordpress 本身,我不知道通过 Wordpress 本身的配置是否有“简单”的方法。在将所有请求发送到 Wordpress 的 index.php 文件的规则上方添加以下规则:

    RewriteRule ^news/([^/]+)/january/([^/]+)/(.*)$ /news/$1/01/$2/$3 [R,L]
    RewriteRule ^news/([^/]+)/february/([^/]+)/(.*)$ /news/$1/02/$2/$3 [R,L]
    RewriteRule ^news/([^/]+)/march/([^/]+)/(.*)$ /news/$1/03/$2/$3 [R,L]
    #etc...
    

    与往常一样,请参阅the documentation 了解有关所使用语法的信息。

    【讨论】:

    • 它不起作用,但没有抛出任何错误。好吧,在 wordpress 中它显示找不到 404,因此重定向无法正常工作。我必须解释一下,我的 wordpress 在 /wordpress 文件夹中,所以我在 .htacces 中有:# BEGIN WordPress RewriteEngine On RewriteBase /wordpress/ RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule 。 /wordpress/index.php [L] 这会影响我的重写规则吗?我知道在网址中我必须添加 mysite.com/wordpress
    • 是的,正如我之前所说,您必须在将请求发送到 wordpress 索引文件的规则之前添加我的规则。在这种情况下,将规则放在RewriteBase 后面。
    【解决方案2】:

    会有 12 条这样的规则,所以你可以有这样的东西:

    RewriteRule ^(news/[^/]+)/january/([^/]+/.+)$ $1/01/$2 [L,R=301,NC]
    RewriteRule ^(news/[^/]+)/february/([^/]+/.+)$ $1/02/$2 [L,R=301,NC]
    RewriteRule ^(news/[^/]+)/march/([^/]+/.+)$ $1/03/$2 [L,R=301,NC]
    RewriteRule ^(news/[^/]+)/april/([^/]+/.+)$ $1/04/$2 [L,R=301,NC]
    RewriteRule ^(news/[^/]+)/may/([^/]+/.+)$ $1/05/$2 [L,R=301,NC]
    RewriteRule ^(news/[^/]+)/june/([^/]+/.+)$ $1/06/$2 [L,R=301,NC]
    RewriteRule ^(news/[^/]+)/july/([^/]+/.+)$ $1/07/$2 [L,R=301,NC]
    RewriteRule ^(news/[^/]+)/august/([^/]+/.+)$ $1/08/$2 [L,R=301,NC]
    RewriteRule ^(news/[^/]+)/september/([^/]+/.+)$ $1/09/$2 [L,R=301,NC]
    RewriteRule ^(news/[^/]+)/october/([^/]+/.+)$ $1/10/$2 [L,R=301,NC]
    RewriteRule ^(news/[^/]+)/november/([^/]+/.+)$ $1/11/$2 [L,R=301,NC]
    RewriteRule ^(news/[^/]+)/december/([^/]+/.+)$ $1/12/$2 [L,R=301,NC]
    

    还要确保在任何其他重写规则之前将这些规则放在首位。

    【讨论】:

    • 已修复。抱歉,多了一个(
    • 好的,现在它没有抛出 500 错误,但是 wordpress 抛出 404,所以它不起作用。我在一个文件夹中有 wordpress:mysqite.com/wordpress 用于开发,我粘贴的 url 也与 wordpress 一起使用,如果我将 01 放在 1 月它可以工作,但使用 'january' 它不起作用......我必须将 wordpress 添加到您粘贴给我的重写规则?
    • 如果你把上面的规则放在RewriteBase /wordpress/下面,那么它应该可以工作。
    • 另外我相信上面的代码在/wordpress/.htaccess 是正确的吗?
    • 是的,正确的是 .htaccess 在该文件夹中。我需要在 wordpress 默认代码之前或之后粘贴您的代码吗?