[英]How to redirect all traffic to https except subdomains
I have recently redirect all traffic to https but I want to keep my subdomains on http only. 我最近将所有流量重定向到https,但我想将我的子域保留在http上。 Please help me to sort out this.
请帮我解决这个问题。
this is my rewriterules 这是我的重写
Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]
this is my virtual host code 这是我的虚拟主机代码
<VirtualHost *:80>
ServerAdmin test@example.com
ServerName staging.example.com
ServerAlias staging.example.com
SetEnv ENVIRONMENT staging
DocumentRoot /var/www/staging/
ErrorLog /var/log/apache2/example_staging_error.log
CustomLog /var/log/apache2/example_staging_access.log combined
<Directory /var/www/staging>
AllowOverride All
Include /etc/apache2/sites-available/example_dir_rules.conf
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerAdmin test@example.com
ServerName example.com
ServerAlias example.com
SetEnv ENVIRONMENT production
DocumentRoot /var/www/production/
ErrorLog /var/log/apache2/example_production_error.log
CustomLog /var/log/apache2/example_production_access.log combined
<Directory /var/www/production>
Include /etc/apache2/sites-available/example_dir_rules.conf
</Directory>
</VirtualHost>
LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so
#Listen 443
<VirtualHost *:443>
SSLEngine on
SSLHonorCipherOrder On
-------------ssl code----------
ServerName example.com
-------------ssl code----------
ServerAdmin test@example.com
ServerName example.com
ServerAlias example.com
SetEnv ENVIRONMENT production
DocumentRoot /var/www/production/
ErrorLog /var/log/apache2/example_ssl_error.log
CustomLog /var/log/apache2/example_ssl_access.log combined
<Directory /var/www/production>
Include /etc/apache2/sites-available/example_dir_rules.conf
</Directory>
</VirtualHost>
Please help me to sort out this. 请帮我解决这个问题。 Thanks in advance.
提前致谢。
You have two choices. 你有两个选择。
1. Either you add a condition in your file to only match main domain 1.在文件中添加条件以仅匹配主域
Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Note that the rule to match www
main domain can be removed since your main domain is example.com
(no trace of www
in your vhosts). 请注意,可以删除匹配
www
主域的规则,因为您的主域名是example.com
(您的虚拟主机中没有www
痕迹)。
Warning: useless in some cases, you should not include the same file in all vhosts (see next point). 警告:在某些情况下无用,您不应在所有vhost中包含相同的文件(请参阅下一点)。
2. Or you can directly put a rule in example.com
(http) vhost block. 2.或者您可以直接在
example.com
(http)vhost块中放置规则。 Indeed, others two ( example.com
for https and stagging
subdomain) do not require rules to do what you want. 实际上,其他两个(
example.com
for https和stagging
subdomain)不需要规则来做你想要的。
So, your config should look like this 所以,你的配置应该是这样的
<VirtualHost *:80>
ServerAdmin test@example.com
ServerName staging.example.com
ServerAlias staging.example.com
SetEnv ENVIRONMENT staging
DocumentRoot /var/www/staging/
ErrorLog /var/log/apache2/example_staging_error.log
CustomLog /var/log/apache2/example_staging_access.log combined
<Directory /var/www/staging>
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerAdmin test@example.com
ServerName example.com
ServerAlias example.com
SetEnv ENVIRONMENT production
DocumentRoot /var/www/production/
ErrorLog /var/log/apache2/example_production_error.log
CustomLog /var/log/apache2/example_production_access.log combined
<Directory /var/www/production>
Options +FollowSymlinks
RewriteEngine On
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</Directory>
</VirtualHost>
LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so
#Listen 443
<VirtualHost *:443>
SSLEngine on
SSLHonorCipherOrder On
-------------ssl code----------
ServerName example.com
-------------ssl code----------
ServerAdmin test@example.com
ServerName example.com
ServerAlias example.com
SetEnv ENVIRONMENT production
DocumentRoot /var/www/production/
ErrorLog /var/log/apache2/example_ssl_error.log
CustomLog /var/log/apache2/example_ssl_access.log combined
<Directory /var/www/production>
</Directory>
</VirtualHost>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.