使用相同的子文件夹重定向不同的 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.html
到 https://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]
我在 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.html
到 https://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]