我是否应该使用.htaccess/REGEX根据原始URL格式转发到不同的URL?

Ho do I use .htaccess/REGEX to forward to different URLs based on original URL format?

提问人:Stuart Cooke 提问时间:6/25/2023 最后编辑:Stuart Cooke 更新时间:6/26/2023 访问量:44

问:

我正在尝试了解如何根据原始 URL 的格式有条件地将域转发到新域,如下所示:

old-domain.co.uk --> newdomain.co.uk/area/mytown

old-domain.co.uk/path-to-article --> newdomain.co.uk/path-to-article

下面的代码适用于任何在域之后有路径的 URL,但显然只是将 olddomain.co.uk 转发到 newdomain.co.uk

RewriteCond %{HTTP_HOST} ^olddomain.co.uk$ [OR]
RewriteCond %{HTTP_HOST} ^www.olddomain.co.uk$ [NC]
RewriteRule ^(.*)$ https://newdomain.co.uk/$1 [R=301,L]

所以 https://olddomain.co.uk/test/newpage 会转发给 https://newdomain.co.uk/test/newpage,这很好。

但是 https://olddomain.co.uk 会转发到 https://newdomain.co.uk 这不是我想要的,所以如果原始 URL 在域之后没有路径,我需要“捕获”它并将其重定向到特定 URL,而不仅仅是新域。

兜圈子试图弄清楚这件事的逻辑,所以任何帮助都不胜感激!我假设我需要指定一些类似“如果 URL 完全匹配,则执行此操作,如果 URL 在域之后有内容,则执行此操作”的内容

谢谢

斯图尔特

正则表达式 .htaccess

评论


答:

0赞 Bademeister 6/26/2023 #1
  1. 检查没有 URL 是否没有路径 (REQUEST_URI => /) 并且域 (HTTP_HOST) www.old-domain.co.uk 或 old-domain.co.uk。
  2. 检查 URL 是否具有路径 (REQUEST_URI != /) 以及域 (HTTP_HOST) 是否 www.old-domain.co.uk 或 old-domain.co.uk。
# 1.
# old-domain.co.uk --> newdomain.co.uk/area/mytown
RewriteCond %{HTTP_HOST} ^(www\.)?old-domain\.co\.uk$
RewriteCond %{REQUEST_URI} ^/$
RewriteRule - https://newdomain.co.uk/area/mytown [R=301,L]

# 2.
# old-domain.co.uk/path-to-article --> newdomain.co.uk/path-to-article
RewriteCond %{HTTP_HOST} ^(www\.)?old-domain\.co\.uk$
RewriteCond %{REQUEST_URI} !^/$
RewriteRule ^(.*)$ https://newdomain.co.uk/$1 [R=301,L]

评论

0赞 Stuart Cooke 6/26/2023
谢谢你 - 我喜欢对 www 的检查,而不必在两行上做......你每天都能学到新东西!代码在 #1 的最后一行稍作改动后效果很好 - 我认为您需要 ^(.*)$?
0赞 Bademeister 6/26/2023
仅当您想匹配整个路径时,您才能使用 .我复制了你的例子并使用了.也只能在要匹配所有内容时才编写。但是只有一个重定向,这就是为什么你可以使用 .如果你不使用结果,你为什么要匹配一些东西?^(.*)$^(.*)$(.*)-