httpd.conf 和虚拟主机 SSL 的重写规则

Posted

技术标签:

【中文标题】httpd.conf 和虚拟主机 SSL 的重写规则【英文标题】:Rewrite rule for httpd.conf and virtual host SSL 【发布时间】:2012-05-16 11:36:21 【问题描述】:

我在 httpd.conf 中有两台虚拟主机,一台用于端口 443,一台用于端口 80:

<VirtualHost IPADDRESS:80>
</VirtualHost>

<VirtualHost IPADDRESS:443>
</VirtualHost>

现在我想将每个请求重定向到我的服务器以转到https://www.mysite.com/ 除了http://www.mysite.com/blog/ 我希望博客不是 SSL。我应该将 RewriteRules 放在哪个 virtualHost 指令中?我需要什么样的规则?

【问题讨论】:

【参考方案1】:

在端口 80 的 VirtualHost 中,一条规则会将博客以外的所有内容重写为 SSL。在443主机中,它会将博客请求重写为非ssl(如果你想强制它们回到非ssl)

<VirtualHost IPADDRESS:80>
  RewriteEngine On

  # Rewrite everything except the blog to SSL
  RewriteCond %REQUEST_URI !^/blog
  RewriteRule (.*) https://www.example.com/$1 [L,R,QSA]
</VirtualHost>

<VirtualHost IPADDRESS:443>
  RewriteEngine On

  # Rewrite the blog back to plain http
  # Leave this out if you don't care that https requests to the blog stay
  # on ssl
  RewriteRule ^(blog*) http://www.example.com/$1 [L,R,QSA]
</VirtualHost>

【讨论】:

在您的 443 配置中,RewriteRule ^(/blog/.*) http://www.example.com$1 [L,R,QSA] 可能更简单。但这是吹毛求疵

以上是关于httpd.conf 和虚拟主机 SSL 的重写规则的主要内容,如果未能解决你的问题,请参考以下文章

笔记13

Plesk:通过 vhost_ssl.conf 覆盖 httpd.conf SSLCertificateFile?

AWS Elastic Beanstalk httpd/conf.d/ssl.conf 无法识别

为 XAMPP 配置 SSL

httpd.conf 和 ssl.conf 的区别

CentOS7单机部署lamp环境和apache虚拟主机