听起来可能有点令人困惑,但我想要实现的是:
如果用户访问:
www.mydomain.com
(有还是没有www.
)将其转移到:
www.myotherdomain.com/welcome-old-users
同时我想实现这一点:
如果他们访问:
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(永久)重定向(如果这是目的)。