我们正在将我们的博客迁移到Wordpress,并且需要为所有预先存在的网址设置301。
root的现有结构如下:
/blog/bid/148509/The-Role-of-a-Father
我们需要做的是转到
我们新的Wordpress博客上的 /the-role-of-a-father
(来自root用户)。
我遇到的一些问题如下:
RewriteRule
来保持原始结尾的slug一样。/bid/
之后的数字永远不会是一致的,所以我需要忽略这些数字的东西,但之后不会忽略标题slu。我知道这要求很多。任何帮助和资源都会非常有用!
答案 0 :(得分:3)
通过大量研究语法,正则表达式和变量信息,我能够弄清楚如何做到这一点。
为了帮助那些也可能不熟悉.htacces,rewrites和/或regex的人,我发布了我的解决方案,以及我学到的东西。
解决我问题的最终产品:
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
指定大写无关紧要。
注意强>
特别注意规则的间距。没有足够的或太多可能导致整个网站崩溃。特别重要的是要知道在flags部分中,逗号之间没有空格。那点我。
答案 1 :(得分:0)
迁移博客时,您需要使用301重定向。
根据定义,301重定向将更改网址栏中的路径。
如果您需要将其设为小写,则需要从内存中执行所有这些步骤。
在您的VirtualHost中,添加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]