avl*_*uis 6 apache .htaccess mod-rewrite ssl redirect
所以我的SSL证书仅适用于https://example.com - 而不是https://www.example.com(不能抱怨,它是免费的).
冒险进入mod_rewrite和大量阅读(主要来自stackoverflow)后,我有一个.htaccess文件,可以完成我需要的大部分工作,这里是该文件(当然还有域编辑).
<IfModule mod_rewrite.c>
RewriteEngine On
#First rewrite any request to the wrong domain to use the correct one
RewriteCond %{HTTP_HOST} !^subdomain\.
RewriteCond %{HTTP_HOST} ^(www|ftp|mail)\.example\.com [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]
#Redirect these subdomains to a subfolder
RewriteCond %{HTTP_HOST} ^([^/.]+)\.example\.com$
RewriteCond %1 !^(www|ftp|mail)$ [NC]
RewriteRule (.+)$ "http://example.com/%1" [L,P]
#Now, rewrite to HTTPS:
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
Run Code Online (Sandbox Code Playgroud)
该脚本包含有关它的功能的评论(我需要的比你想象的更多).并且在重定向的子域的文件夹上有一个额外的.htaccess文件(根网站文件夹中的子文件夹,具有匹配的子域名)以及我的dns服务器上附带的dns条目.该文件夹上的.htaccess只是将http(端口80)重定向到https.
目前,它做了我需要的,但我正在寻找更简单的方法来写这个.而且更简单,它也可能意味着更全局化(如果它使其比硬编码域更快)并且如果从所述重写中获得任何速度改进.
如前所述,我的证书仅适用于非www example.com域名,因此这将我带到第二个(但我的主要)问题.
像这样路由的流量:https://www.example.com将在任何路由,重写等之前看到错误.这是因为此时甚至没有发生与Web服务器的连接,对吗?这基本上是你的服务器递交你的证书和浏览器说: 等一下!
有没有办法在浏览器发出证书错误之前阻止流量以不正确的方式(https:// www)攻击您的服务器?
这不必仅限于.htaccess方法.
有没有办法做到这一点 - 根本没有?那是什么意思?
编辑:
我的条件有一些问题,重写不应该查询.我也有一些重定向循环,所以前往apache.org进行研究; 所以,现在跟踪这些变化的方法是.htaccess文件:
<IfModule mod_rewrite.c>
RewriteEngine On
# First rewrite any request to the wrong domain to use the correct one
RewriteCond %{HTTP_HOST} ^(www|ftp|mail)\.example\.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1
# Redirect these subdomains to a subfolder
RewriteCond %{HTTP_HOST} ^([^/.]+)\.example\.com$
RewriteCond %{REQUEST_URI} !^([^/.]+)/([^/.]+)
RewriteCond %1 !^(www|ftp|mail)$ [NC]
RewriteRule ^(.*)$ http://example.com/%1$1 [L,NC,QSA]
#Now, rewrite to HTTPS:
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} ^http://example\.com/$ [NC]
RewriteRule ^/?(.*) https://%{HTTP_HOST}/$1 [L,R,NE]
</IfModule>
Run Code Online (Sandbox Code Playgroud)
有没有办法在浏览器发出证书错误之前阻止流量以不正确的方式(https:// www)攻击您的服务器?
不,你无能为力,你的评估是正确的,浏览器查看服务器证书并发现主机不匹配并显示错误.该错误不是由服务器生成的,而是在请求被发送到服务器之前发生.这种情况发生在SSL握手期间.您可以做的唯一事情是阻止http://www现有链接,或购买包含"www"的新证书.
至于你的规则,因为每条规则都有多个条件,所以实际上没有办法简化它.
| 归档时间: |
|
| 查看次数: |
5252 次 |
| 最近记录: |