使用相同的子文件夹重定向不同的 url

redirect different url with the same subfolder

我在 wordpress 多站点上。

我有具有相同子文件夹名称的旧 url,现在我必须将旧 url 重定向到具有新子文件夹名称的新 url。

示例(会更简单)

旧 url 1 到新 url 1:

http://site1.fr/fr-chauffage.html https://www.site1.fr/installation_chauffage

旧 url 2 到新 url 2:

http://site2.fr/fr-chauffage.htmlhttps://www.site2.fr/installateur_chauffage_dans_ma_region

所以我写了下面的htaccess文件

RewriteCond %{HTTP_HOST} ^site1\.fr
RewriteRule ^/?(.*)$ https://www.site1.fr/ [R=301,L]
RewriteRule ^fr\.html$ / [R=301,L]
RewriteRule ^fr-chauffage.html$ /installation_chauffage/ [R=301,NC,L]
 
RewriteCond %{HTTP_HOST} ^site2\.fr
RewriteRule ^/?(.*)$ https://www.site2.fr/ [R=301,L]
RewriteRule ^fr\.html$ / [R=301,L]
RewriteRule ^fr-chauffage.html$ /installateur_chauffage_dans_ma_region/ [R=301,NC,L]

问题是用户总是重定向到 site1 + good_subfolder

如果我有 3 个具有相同子文件夹名称的网站,用户将始终被重定向到新 url 的 site1 + good_subfolder ...

The trouble is whatever the website the user is always redirect to site1 + good_subfolder

因为 RewriteCond 指令只适用于后面的第一个 RewriteRule。随后的两个 RewriteRule 指令正在 无条件地执行

您需要为所有需要应用的规则重复该条件。

您的指令顺序也有误 - 您首先需要有更具体的规则,否则您将获得多次重定向。目前,您正在重定向第一条规则中的所有内容。然后您稍后会有更具体的重定向。

那么,所有 传入请求都少了 www 前缀(如您的示例和指令中所建议的那样)吗?

请尝试以下操作:

# Common rules for both sites
# (Although this will result in 2 redirects if requesting the non-canonical hostname)
RewriteRule ^fr\.html$ / [R=301,L]

# Site 1 rdirects
RewriteCond %{HTTP_HOST} ^(www\.)?site1\.fr [NC]
RewriteRule ^fr-chauffage.html$ https://www.site1.fr/installation_chauffage/ [R=301,NC,L]

# Site 2 rdirects
RewriteCond %{HTTP_HOST} ^(www\.)?site2\.fr [NC]
RewriteRule ^fr-chauffage.html$ https://www.site2.fr/installateur_chauffage_dans_ma_region/ [R=301,NC,L]

# non-www to www redirect - both sites
RewriteCond %{HTTP_HOST} ^(site1\.fr|site2\.fr) [NC]
RewriteRule (.*) https://www.%{HTTP_HOST}/ [R=301,L]