在WordPress上移动时需要编辑htaccess

时间:2014-12-27 作者:Fabio Marzocca

我正在将我的网站从另一个CMS移动到WordPress。我现在有这个。htaccess

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

# END WordPress
由于我需要保持我在谷歌搜索中的旧链接与新网站保持一致,我如何修改当前链接。htaccess以完成以下规则?

旧链接:

http://<mysite>/index.php?page=<pagename>
应更改为:

http://<mysite>/<pagename>
谢谢你的帮助。

法维奥

1 个回复
SO网友:hunterhogan

这个问题看起来很简单,但如果您使用WordPress的一些基本功能(例如类别),那么解决方案可能会变得非常复杂和困难。我下面的建议假设您使用一个非常简单的设置。

首先,我假设当您将内容转换为WordPress时,您在旧CMS和WP中所称的[页面名称]是相同的(包括大写)。在WP中,[页面名]有一个技术名称“slug”,但在某些地方它被称为“postname”或“postname”。在您转换内容,同时确保旧CMS中的[页面名]是WP中的slug之后,您应该配置永久链接。

在WP中,单击设置、永久链接。选择帖子名称选项,因为它符合您在问题中提出的要求,“//[我的网站]/[页面名称]”。

现在,WP将正确识别新格式“//[mysite]/[pagename]”中的页面请求。最后一步是配置服务器以更改URL。有多种方法可以实现这一点,但由于您特别提到。htaccess,我会坚持这一点,我会使用一个简单的方法,应该适用于您的所有帖子。

<IfModule mod_rewrite.c> # make sure the server can execute the directives
RewriteEngine On # turn on the group of directives you will need
RewriteRule ^index\\.php\\?page=(.*) /$1 [R=301,L] # do the dirty work
</IfModule> # close your conditional check
假设您使用的是Apache,以下两页将非常有用:https://httpd.apache.org/docs/current/mod/mod_rewrite.htmlhttps://httpd.apache.org/docs/current/rewrite/intro.html

让我们分析一下执行重载的指令:

RewriteRule ^index\\.php\\?page=(.*) /$1 [R=301,L]
RewriteRule是一个指令,由三部分组成。它的意思是“重写规则{如果URL看起来像这个},那么{将其更改为这个}和{一些额外的标志来做特殊的事情}”

第一部分是正则表达式:(如果您已经知道RegEx,请原谅我)

^index\\.php\\?page=(.*)
^告诉服务器开始在字符串开头查找URL,但不包括域名。

大多数其他字符的意思与它们的外观完全相同,“i”表示i,“a”表示a,但其中有一些特殊字符。

句号“”表示完全匹配一个字符:换句话说,它是一个通配符。因此,对于您的服务器,“index.php”表示“index”,后跟任何可能的字符,后跟“php”。我们不想混淆服务器,所以我们使用反斜杠\\来避开句点,并告诉服务器我们指的是句点,并且仅指句点,因此:

index\\.php
同样,问号“?”有着特殊的意义,所以我们也必须逃避它。这至少可以解释这么多:

^index\\.php\\?page=
这个表达的下一部分是美丽而有力的(是的,我是个书呆子)。括号捕获字符串,以便以后可以重用它。它将捕获什么?如上所述,句点表示只匹配一个字符。星号*表示多次重复前面的命令:将它们放在一起并。*意思是至少匹配一个字符,直到有东西阻止你。在这种情况下,字符串的结尾会阻止服务器匹配字符。

这里的神奇之处在于。*位于括号(.*)内,因此它匹配的所有字符都将被“捕获”:存储以供以后使用。我们在哪里使用它们?让我们转到指令的第二部分:

$1
这太简单了,看起来几乎是错的。指令的这一部分告诉服务器如何重建URL。当您使用括号捕获字符时,服务器会将其临时存储在内存中,因为这是您捕获的第一个字符串,服务器会方便地将内存空间命名为$1。(回想一下,美元符号是单词“string”的简写形式。)

因此,通过编写$1,您告诉服务器使用捕获的字符作为新URL。它将被附加到域名上,由于域名以正斜杠结尾,URL看起来像//[我的网站]/[页面名]。

最后是旗帜。“R”表示重定向。这是供访问客户端读取的代码。这对搜索引擎来说尤其重要,因为它告诉他们,“嘿,我知道你在一个特定的URL上寻找这个页面,但这个页面现在不在这里,所以我将你重定向到另一个URL。”但是为什么要重定向?这就是重定向代码背后的要点。301表示永久重定向,因此搜索引擎将更新其数据库——用新URL替换旧URL。

L标志表示“last”,因为这是我希望服务器在这个特定URI请求上处理的最后一个重写规则。

我的朋友,这是实现你的目标最简单的方法之一。如果你想做更复杂的事情,要准备好多学习,多哭。我的htaccess文件有141行,而且还在增长。我的办公桌上有一个小凹痕,我反复捶着头,试图让事情正常运转。

祝你好运

结束

相关推荐

.htaccess正则表达式,用于将子域重定向到根域并重定向旧的永久链接

好的,我在网站上有一个博客。我的网站。com,最近将所有内容迁移到mysite的新wp安装中。com。我想重定向博客中的所有帖子。我的网站。com到mysite。com和permalink结构。博客我的网站。com为/%年%/%月%/%日%/%postname%/我的网站。com为/%类别%/%postname%/目标是如果有人博客我的网站。com/%年%/%月%/%日%/%postname%/它们将被重定向到我的网站。com为/%类别%/%postname%/我想最终删除博客上的所有内容。我的网站。co