繁体   English   中英

我可以在 HTACCESS 中使用 IF 语句,以便我可以 301 仅重定向特定域(对于单个 docroot 上的多域)

[英]Can I use an IF statement in an HTACCESS so that I can 301 redirect only specific domain (for multidomains on single docroot)

我运行一个带有云/网络服务的服务器,我的用户可以通过他们的子域访问他们的帐户:

  • 我的主站点: www.myservice.com

  • 用户 A:usera.myservice.com

  • 用户 B:userb.myservice.com

最近我添加了用户使用自己的域的选项。 这通过虚拟服务器效果很好。 因此,现在如果有人访问www.usera.com ,他们会在浏览器中看到“www.usera.com”,但实际上他们使用的是 usera.myservice.com (我认为这是所谓的“单个 docroot 上的多域”)

到目前为止,一切都很好。

我的问题是:用户 A 已经有一个站点,并且希望永久重定向以使旧 URL 指向新的。 但是,当我在根文件夹中的 htaccess 中实现此功能时,规则适用于所有域,包括 myservice.com。

我想实现 301 重定向,但仅限于选定的域。

我想我很接近,但是......这不起作用。

<If "%{HTTP_HOST} =~ /^usera.com\./">
   Redirect 301 /oldpath/product1 https://usera.com/newpath/product1
   Redirect 301 /newsartciles/article1 https://usera.com/read/article1
   //etc
</If>

因此:如果 HTTP_HOST 包含“usera.com”(在“usera.com”前后有“通配符”),那么(并且仅在那时)在该 IF 语句中应用所有 376 重定向 301 规则。

谁能帮我吗? 我怎样才能做到这一点?

没关系! 我发现我不必使用任何通配符 在我的情况下,以下工作完美:

<If "%{HTTP_HOST} == 'usera.com'">
   Redirect 301 /oldpath/product1 https://usera.com/newpath/product1
   Redirect 301 /newsartciles/article1 https://usera.com/read/article1
   //etc
</If>

在一些 http->https 和 www->non-www 规则之后,我实现了这个 if 语句:

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

#then: force https
RewriteCond %{HTTPS} !=on
# This checks to make sure the connection is not already HTTPS
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L]

#and then
<If "%{HTTP_HOST} == 'usera.com'">
   Redirect 301 /oldpath/product1 https://usera.com/newpath/product1
   Redirect 301 /newsartciles/article1 https://usera.com/read/article1
   //etc
</If>

有了这个,我让它像我希望的那样工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM