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

Regex 我可以在HTACCESS中使用IF语句,以便只重定向特定域(对于单个docroot上的多域),regex,apache,.htaccess,if-statement,redirect,Regex,Apache,.htaccess,If Statement,Redirect,我使用云/Web服务运行服务器,我的用户可以通过他们的子域访问他们的帐户: 我的主要网站: 用户A:usera.myservice.com 用户B:userb.myservice.com 最近,我为用户添加了使用自己域的选项。这在虚拟服务器中非常有效。因此,现在如果有人访问,他们会在浏览器中看到“www.usera.com”,但实际上他们使用的是usera.myservice.com(“单docroot上的多域”,我想这就是所谓的) 到目前为止还不错 我的问题是:用户A已经有了一个站点

我使用云/Web服务运行服务器,我的用户可以通过他们的子域访问他们的帐户:

  • 我的主要网站:

  • 用户A:usera.myservice.com

  • 用户B:userb.myservice.com

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

到目前为止还不错

我的问题是:用户A已经有了一个站点,并且希望有永久的重定向,以使旧的URL指向新的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>

重定向301/oldpath/product1https://usera.com/newpath/product1
重定向301/newsartciles/article1https://usera.com/read/article1
//等
因此:如果HTTP_主机包含“usera.com”(在“usera.com”的前面和后面都有“wildcard”),那么(并且只有在那时)在该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>

重定向301/oldpath/product1https://usera.com/newpath/product1
重定向301/newsartciles/article1https://usera.com/read/article1
//等
我在一些http->https和www->非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>
#第一:从www到非www
重写条件%{HTTP_HOST}^www\.(.*)$[NC]
重写规则^(.*)$http://%1/$1[R=301,L]
#然后:强制https
重写cond%{HTTPS}=在…上
#这将检查以确保连接不是HTTPS
重写规则^/?(*)https://%{SERVER_NAME}/$1[R=301,L]
#然后
重定向301/oldpath/product1https://usera.com/newpath/product1
重定向301/newsartciles/article1https://usera.com/read/article1
//等

有了这个,我就可以像我希望的那样工作了。

您的正则表达式要求在主机名末尾加一个点,但主机名并不是真正的
usera.com。
(对于该表达式中的第一个点,转义丢失了。)谢谢@CBroe!我在regex是一个彻头彻尾的noob(你可以告诉我),但我想学习。你能告诉我它应该怎么写才能工作吗?像这样
/^usera\.com$/
-该点应为文字点,而不是通配符,因此需要对其进行转义。您不想在
…com
之后找到任何其他内容-因此这里没有更多的点和转义点,而只是一个美元符号,用于将模式锚定到末尾,就像
^
在开始时所做的一样。