我正计划将域名从www.example.com更改为example2.com。为了更进一步,我还想同时更改我的固定链接。我当前的帖子固定链接有日期,我想删除它。example1.com to example2.com. To add a twist to it, I also want to change my permalinks at the same time. My current permalinks for posts have the date and I want to remove it.
我有点犹豫,以测试和失去搜索引擎优化,所以我希望有人能确认这将工作之前。
我是这么想的:在更改域后,我在htaccess中使用此代码
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example1.com [NC,OR]
RewriteCond %{HTTP_HOST} ^www.example1.com [NC]
RewriteRule ^\d{4}/\d{2}/(.*) https://example2.com/$1 [R=301,L]
然后我发现了这个更改日期的规则:
RewriteRule ^[0-9]{4}/[0-9]{2}/(.*)$ https://example2.com/$1
我也看到了这个:
RewriteRule ^/(\d*)/(\d*)/([A-Za-z0-9-]*)$ https://example2.com/$4
我不知道这些规则具体是什么意思,但我想我应该能够像这样结合起来?
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example1.com [NC,OR]
RewriteCond %{HTTP_HOST} ^www.example1.com [NC]
RewriteRule ^[0-9]{4}/[0-9]{2}/(.*)$ http://example2.com/$1 [L,R=301,NC]
好像不太对劲。
或者仅仅改变WordPress中的固定链接结构会影响更改
https://www.example1.com/2019/01/how-to-write-about-cars/
redirects to
https://www.example2.com/how-to-write-about-cars/
- 更新**
使用MrWhite的答案如下。我添加了以下代码:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example1.com [NC,OR]
RewriteCond %{HTTP_HOST} ^www.example1.com [NC]
RewriteRule ^/(\d*)/(\d*)/([A-Za-z0-9-]*)$ https://example2.com/$4
这在以下情况下有效
https://www.example1.com/2019/01/how-to-write-about-cars/
which redirects to
https://www.example2.com/how-to-write-about-cars/
不过
https://www.example2.com/2019/01/how-to-write-about-cars/
does NOT redirect to
https://www.example2.com/how-to-write-about-cars/
它只是返回一个404。这可能不是一个问题,因为没有什么应该被书签,但以防万一,有办法解决这个问题吗?
1条答案
按热度按时间ds97pgxw1#
或者仅仅改变WordPress中的固定链接结构会影响这种变化吗
我不相信这会实现从旧的到新的URL结构的重定向,如果这是你所想的(至少在默认情况下不会)。
这看起来没问题。尽管如果
example2.com
处的新URL不包含日期(即/YYYY/MM/
前缀),那么似乎没有任何必要检查请求的主机名。这个规则也必须在
.htaccess
文件的顶部,在任何现有的WordPress指令之前(即 * 在# BEGIN WordPress
注解标记之前 *)。您应该首先使用302(临时)重定向进行测试,以避免潜在的缓存问题。
最终溶液
但是,这可以稍微整理一下,下面的一行程序应该足够了:
您不需要任何
RewriteCond
指令。(如果.htaccess
文件中的其他位置没有RewriteEngine On
指令,则只需要RewriteEngine On
指令。)请注意目标URL上的
https
。\d
(速记字符类)与[0-9]
相同。由于正则表达式默认为greedy,因此不需要正则表达式的尾随$
。由于此正则表达式中没有特定于大小写的内容,因此也不需要NC
标志。我也看到了这个:
然而,这个规则是非常错误的!由于
RewriteRule
* pattern * 上的斜杠前缀,这在.htaccess
中永远不会匹配,并且该规则将不执行任何操作。但是在正则表达式中只有3个捕获组,因此$4
反向引用将始终为 * empty *(一切都会被重定向到主页,这很可能会被搜索引擎视为软-404)。