WordPress重写规则(迁移网站,重定向所有网址)

zfciruhq  于 2023-03-22  发布在  WordPress
关注(0)|答案(1)|浏览(164)

我找不到任何关于我的确切问题的帖子,我不够聪明,无法在一个实时网站上尝试和错误的东西。
所以请帮帮我。
我想将网站A迁移到网站B,我知道我需要将重写规则放入网站A. htaccess。
重写规则应该如下所示:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^websiteA.de$ [NC]
RewriteRule ^(.*)$ https://www.websiteB.de/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^www.websiteA.de$ [NC]
RewriteRule ^(.*)$ https://www.websiteB.de/$1 [L,R=301]

我的问题是,网站B的URL结构与网站A不同。网站A是“https://websiteA.de/%postname%/”,但网站B是“https://websiteB.de/%category%/%postname%/”
也许是这样的

RewriteEngine On
RewriteCond %{HTTP_HOST} ^websiteA.de$ [NC]
RewriteRule ^(.*)$ https://www.websiteB.de/%category%/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^www.websiteA.de$ [NC]
RewriteRule ^(.*)$ https://www.websiteB.de/%category%/$1 [L,R=301]

但是我绝对不确定,我没有想法,我不能在我的live页面上测试它。你能告诉我重写规则应该是什么样子的吗?
我在互联网上寻找类似的问题,但我对结果不满意。

gr8qqesn

gr8qqesn1#

数以千计的URL。两个不同的类别。
WebsiteA指向一个旧服务器,是的。我认为较小的类别有大约800个URL。其他有大约3000个
由于websiteA.com指向的是一个旧服务器,因此您实际上不能这也允许你简化.htaccess中的指令,因为你不需要检查请求的主机名。因为所有到达这个主机的请求都是针对websiteA.com的,websiteB.com服务器没有额外的开销。而且因为“只有”两个类别,所以使用.htaccess确实是一个可行的选择。
然而,这确实意味着你需要手动指定较小类别的URL(所有800个URL)。你可以从旧URL列表和编辑器中的宏生成这些指令。
例如,在websiteA.com的根目录下的.htaccess文件中:

RewriteEngine On

# Redirect the homepage only to the root
# (I assume the homepage does not have a "category"?)
RewriteRule ^$ https://www.websiteB.com/ [R=301,L]

# (OPTIONAL) Redirect static assets (URLs with a file extension) to the same URL (no "category")
RewriteRule \.(jpg|css|js|pdf)$ https://www.websiteB.com%{REQUEST_URI} [R=301,L]

# List all 800 URLs for the smaller category ("category-1")
RewriteCond $1 =post-name-001 [OR]
RewriteCond $1 =post-name-002 [OR]
RewriteCond $1 =post-name-003 [OR]
: etc.
RewriteCond $1 =post-name-800
RewriteRule ^([^/.]+)/?$ https://www.websiteB.com/category-1/$1 [R=301,L]

# Redirect remaining URLs (approx 3000) to the larger category ("category-2")
RewriteRule ^([^/.]+)/?$ https://www.websiteB.com/category-2/$1 [R=301,L]

注意:在最后一个 conditionRewriteCond指令)上没有OR标志。
$1反向引用包含从RewriteRule * 模式 * 捕获的URL路径。请注意,这不是以斜杠开头。我已经从捕获的子模式中排除了 * 可选 * 尾随斜杠,所以不要在前面的 * 条件 *(RewriteCond指令)中的任何URL上包含尾随斜杠。

**UPDATE:**我修改了正则表达式(RewriteRulepattern),从(.+?)/?$修改为^([^/.]+)/?$,因为旧的URL只包含/%postname%/(单个路径段)。我还假设%postname%不包含点。

如果在websiteA.com上使用Apache/.htaccess,这是最简洁的方法。
首先使用302(临时)重定向进行测试,以避免潜在的缓存问题。

相关问题