将文档根目录和特定页面仅重定向到另一个域

将文档根目录和特定页面仅重定向到另一个域

听起来可能有点令人困惑,但我想要实现的是:

  1. 如果用户访问:

    www.mydomain.com(有还是没有www.

    将其转移到:

    www.myotherdomain.com/welcome-old-users

  2. 同时我想实现这一点:

    如果他们访问:

    www.domain.com/about-us(有还是没有www.

    将其转移到:

    www.myotherdomain.com/about-us

到目前为止我所拥有的是:

<IfModule mod_rewrite.c>
    RewriteEngine On

    # To redirect all users to HTTPS 
     RewriteCond %{HTTP:X-Forwarded-Proto} !https
     RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

    # Redirects all www to non-www
     RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
     RewriteRule ^(.*)$ https://%1/$1 [R=301,L]


     RewriteBase /
     RewriteCond %{HTTP_HOST} (^www.)?mydomain.com/?$ [NC]
     RewriteRule ^(.*)$ https://myotherdomain.com/$1 [R=301,L]

这与第 2 点一致

任何帮助都将不胜感激!

答案1

RewriteCond %{HTTP_HOST} (^www.)?mydomain.com/?$ [NC]
RewriteRule ^(.*)$ https://myotherdomain.com/$1 [R=301,L]

这与第 2 点一致

但这个问题是它会重定向一切,而不仅仅是/about-us,这就是您所陈述的第 2 点的要求。

(^www.)?mydomain.com/?$- 您将字符串起始锚点 ( ^) 放错了位置。这将匹配任何以“mydomain.com”结尾的主机名(包括任何子域名和共享相同后缀的域名)。Host标头永远不会以斜杠结尾,因此/?末尾的 是多余的。

RewriteBase这里不需要该指令。)

你需要做类似下面的事情,您现有的指令,位于文件顶部.htaccess

# Redirect "/" (document root) only
RewriteCond %{HTTP_HOST} ^(www\.)?mydomain\.com [NC]
RewriteRule ^$ https://www.myotherdomain.com/welcome-old-users [R=302,L]

# Redirect "/about-us" only
RewriteCond %{HTTP_HOST} ^(www\.)?mydomain\.com [NC]
RewriteRule ^about-us$ https://www.myotherdomain.com/$0 [R=302,L]

测试前需要清除缓存。使用 302(临时)重定向进行测试,确保其正常工作,然后再更改为 301(永久)重定向(如果这是目的)。

相关内容