我正在尝试设置一个重写规则,只有在请求根目录时才会重定向子域。我试图将这些设置为适用于我所有域的全局规则,这样我就不需要在每次设置新域时都进行配置。澄清为什么这是一个问题,因为我正在使用 cPanel,它会为任何新域/帐户做很多自动的事情......
解释一下,我的愿望是重定向所有 www、mail 和 mta-sts 子域,以及任何 www 或 mail 子域到子域(www.subdomain.domain.tld -> subdomain.domain.tld。)具体来说对于 mta-sts,我无法让请求转到被重定向的子域中的必要文件。我尝试了多种方法来澄清仅重定向对根目录的请求,但我没有运气。
我成功地完成了我想做的大部分事情:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.+?)\.(.+?)$ [NC,OR]
RewriteCond %{HTTP_HOST} ^mail\.(.+?)\.(.+?)$ [NC,OR]
RewriteCond %{HTTP_HOST} ^mta-sts\.(.+?)\.(.+?)$ [NC]
RewriteRule ^/?(.*)$ http://%1.%2/$1 [L,R=301]
RewriteCond %{HTTP_HOST} ^www\.(.+?)\.(.+?)\.(.+?)$ [NC,OR]
RewriteCond %{HTTP_HOST} ^mail\.(.+?)\.(.+?)\.(.+?)$ [NC]
RewriteRule ^/?(.*)$ http://%1.%2.%3/$1 [L,R=301]
感谢任何反馈。
感谢 CBroe 的提示。这是最终结果,干净多了。
RewriteEngine on
RewriteCond %{HTTP_HOST} ^mta-sts\.(.+?)\.(.+?)$ [NC]
RewriteRule ^/$ http://%1.%2/$1 [L,R=301]
RewriteCond %{HTTP_HOST} ^(www|mail)\.(.+?)\.(.+?)$ [NC]
RewriteRule ^/?(.*)$ http://%2.%3/$1 [L,R=301]
RewriteCond %{HTTP_HOST} ^(www|mail)\.(.+?)\.(.+?)\.(.+?)$ [NC]
RewriteRule ^/?(.*)$ http://%2.%3.%4/$1 [L,R=301]