我的 httpd.conf 最底部有以下内容。没有进行其他配置。
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName www.contoso.com
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
RewriteCond %{HTTP_HOST} !^www.* [NC]
RewriteCond %{HTTP_HOST} ^stoplight.* [NC]
RewriteCond %{HTTP_HOST} ^([^\.]+)\.contoso\.com
RewriteCond /var/www/html/%1 -d
RewriteRule (.*) https://www.contoso.com/blarg%{REQUEST_URI}
</VirtualHost>
NameVirtualHost *:443
<VirtualHost *:443>
DocumentRoot /var/www/html
ServerName www.contoso.com
RewriteCond %{HTTP_HOST} !^www.* [NC]
RewriteCond %{HTTP_HOST} ^stoplight.* [NC]
RewriteCond %{HTTP_HOST} ^([^\.]+)\.contoso\.com
RewriteCond /var/www/html/%1 -d
RewriteRule (.*) https://www.contoso.com/blarg%{REQUEST_URI}
SSLEngine on
SSLCertificateFile BLAH BLAH BLAH this works great
SSLCertificateKeyFile BLAH BLAH BLAH this works great
SSLCertificateChainFile BLAH BLAH BLAH this works great
</VirtualHost>
因此,我的重定向有两个目标:将所有 http 重定向到 https(有效)并将 blarg.contoso.com 重定向到 contoso.com/blarg(如果尚未重定向,则重定向到 https)。
如果我输入http://blarg.contoso.com,我被重定向到https://www.contoso.com/blarg。但是,如果我输入https://blarg.contoso.com,不会发生重定向。
有什么建议吗?运行 RHEL 6.5 64 位。非常感谢!
编辑:
在你们的帮助下,我从 HTTP 虚拟主机中删除了子域名重定向,并将其移至 HTTPS 虚拟主机。我只发布 HTTPS 版本,因为这是我遇到的唯一问题。
NameVirtualHost *:443
<VirtualHost *:443>
DocumentRoot /var/www/html
ServerName www.summitcreators.com
RewriteCond %{HTTP_HOST} !^www.* [NC]
RewriteCond %{HTTP_HOST} ^stoplight.* [OR]
RewriteCond %{HTTP_HOST} ^([^\.]+)\.summitcreators\.com
RewriteCond /var/www/html/%1 -d
RewriteRule (.*) https://www.summitcreators.com/stoplight%{REQUEST_URI}
</VirtualHost>
现在,子域名重定向不再起作用。
答案1
我觉得你错过了:
RewriteEngine On
在 https 部分。
答案2
您RewriteRule
使用
RewriteCond %{HTTP_HOST} ^stoplight.* [NC]
因此,SSL vhost 所做的唯一重写是针对以 开头的域的请求stoplight
。
我认为删除该规则可以解决您的问题。