这个问题看起来很简单,但如果您使用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行,而且还在增长。我的办公桌上有一个小凹痕,我反复捶着头,试图让事情正常运转。
祝你好运