1

我们正在将我们的博客迁移到 Wordpress,并且需要为所有预先存在的 URL 设置 301。

从根开始的现有结构如下:

/blog/bid/148509/The-Role-of-a-Father

我们需要它做的是去

/the-role-of-a-father(从根目录)在我们的新 Wordpress 博客上。

我遇到的一些问题如下:

  1. 我不知道如何做一个RewriteRule保持原来的结局蛞蝓一样。
  2. 之后的数字/bid/永远不会一致,因此我需要一些忽略这些数字但之后不会忽略标题的东西。
  3. 我需要将最终 URL 转换为小写。

我知道这要求很多。任何帮助和资源都会非常有帮助!

4

2 回答 2

3

通过对语法、正则表达式和变量信息的大量研究,我能够弄清楚如何做到这一点。

为了帮助其他可能对 .htacces、重写和/或正则表达式不熟悉的人,我发布了我的解决方案以及我学到的东西。

解决我的问题的最终产品:

RewriteRule ^blog/bid/[0-9].*/(.*)$ /$2? [R=301,L,NC]

完整的 .htaccess 如下所示:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /

RewriteRule ^blog/bid/[0-9].*/(.*)$ /$1? [R=301,L,NC]


</IfModule>

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

</IfModule>

# END WordPress

基本上我所做的就是在模式上使用一些正则表达式魔法。由于之后的数字/bid/总是改变,使用正则表达式我可以说“匹配这个模式,不管里面有什么数字”这是使用[0-9].*

[0-9]匹配任何编号为 0-9 的字符。.匹配任何单个字符并*匹配该字符的 0 个或多个实例。

下一部分是魔法发生的地方。之后的 slug (永久链接)被匹配.*并在包装时()被保存为变量。

然后我可以在重写的替换部分中使用该变量。$1是表示(.*)模式部分中的变量。如果包含更多部分,()则可以使用$1,$2等来使用初始模式中保存的变量。

完成后,我设置我的标志:R=301设置标题重定向,告诉搜索引擎内容已永久移动。L是匹配该模式时应用的最后一条规则(即不要继续尝试匹配重写)。NC指定大小写无关紧要。

笔记

特别注意规则的间距。没有足够或太多可能会导致您的整个网站崩溃。尤其重要的是要知道在标志部分中,逗号之间没有空格。那咬我。

于 2013-06-06T21:22:12.057 回答
0

迁移博客时,您需要使用 301 重定向。

根据定义,301 重定向将更改 url 栏中的路径。

根据记忆,如果您也需要将其设为小写,则需要执行所有这些步骤。

在您的虚拟主机中,添加RewriteMap lc int:tolower

在您的 .htaccess 中,添加:

RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule (.*) ${lc:$1} [R=301,L]

RewriteRule /blog/bid/([0-9]+)/(.*) /$2 [R=301,l]
于 2013-06-06T20:15:02.390 回答