apache 我改变了域名和后鼻涕虫结构在同一时间为我的可湿性粉剂网站,我可以使用1重定向这样做与htaccess?

h4cxqtbf  于 2023-02-19  发布在  Apache
关注(0)|答案(1)|浏览(93)

我正计划将域名从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。这可能不是一个问题,因为没有什么应该被书签,但以防万一,有办法解决这个问题吗?

ds97pgxw

ds97pgxw1#

或者仅仅改变WordPress中的固定链接结构会影响这种变化吗
我不相信这会实现从旧的到新的URL结构的重定向,如果这是你所想的(至少在默认情况下不会)。

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]

这看起来没问题。尽管如果example2.com处的新URL不包含日期(即/YYYY/MM/前缀),那么似乎没有任何必要检查请求的主机名。
这个规则也必须在.htaccess文件的顶部,在任何现有的WordPress指令之前(即 * 在# BEGIN WordPress注解标记之前 *)。
您应该首先使用302(临时)重定向进行测试,以避免潜在的缓存问题。

最终溶液

但是,这可以稍微整理一下,下面的一行程序应该足够了:

RewriteRule ^\d{4}/\d{2}/(.*) https://example2.com/$1 [R=301,L]

您不需要任何RewriteCond指令。(如果.htaccess文件中的其他位置没有RewriteEngine On指令,则只需要RewriteEngine On指令。)
请注意目标URL上的https\d(速记字符类)与[0-9]相同。由于正则表达式默认为greedy,因此不需要正则表达式的尾随$。由于此正则表达式中没有特定于大小写的内容,因此也不需要NC标志。

  • 旁白:*(不要用这个!)

我也看到了这个:

RewriteRule  ^/(\d*)/(\d*)/([A-Za-z0-9-]*)$ https://example2.com/$4

然而,这个规则是非常错误的!由于RewriteRule * pattern * 上的斜杠前缀,这在.htaccess中永远不会匹配,并且该规则将不执行任何操作。但是在正则表达式中只有3个捕获组,因此$4反向引用将始终为 * empty *(一切都会被重定向到主页,这很可能会被搜索引擎视为软-404)。

相关问题