如何为多域环境编写.htaccess规则

时间:2016-09-01 20:45:05

标签: apache .htaccess ssl mod-rewrite

我有两种主要类型的域指向我的Web服务器。主要流量(example.com)我想直接到https,但其余的流量(即profile1.net,profile2.net等)我想留下作为http。 出于这个原因,我无法使用全能SSL重定向类型的规则。此外,我有更多规则可以重定向配置文件名称和隐藏扩展等等,所以我不能使用L RewriteRule之后的指令

我还希望将所有主要流量都包含在子域名www。

中 我似乎无法将这两个部分放在一起,系统似乎忽略了其中一个条件。请查看:

Options +FollowSymLinks
RewriteEngine on

RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^/?$ "https://www.example.com/$1" [R=301]

结果:测试案例3& 4工作。测试用例1& 2显示为http://

如果我评论出www。在有条件的行中,example.com可以完美地运行:

Options +FollowSymLinks
RewriteEngine on

RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
#RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^/?$ "https://www.example.com/$1" [R=301]

结果:测试案例1,3和& 4工作。测试用例2显示为http://

测试用例:

  1. example.com - > https://www.example.com
  2. www.example.com - > https://www.example.com
  3. https://example.com - > https://www.example.com
  4. https://www.example.com - > https://www.example.com
  5. *这些测试用例不适用于此示例,但在整体*

    中执行
    1. [以上任何一项] /signup.php - > https://www.example.com/signup.php
    2. profile.net - > profile.net
    3. www.profile.net - > www.profile.net
    4. https://profile.net - > THROWS 浏览器中的SSL异常
    5. https://www.profile.net - > THROWS SSL 浏览器中的例外情况

1 个答案:

答案 0 :(得分:1)

以下是针对所有4种情况的单个301重定向规则:

RewriteEngine on

RewriteCond %{HTTP_HOST} !^www\. [NC,OR]
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^(?:www\.)?(example\.com)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L,NE]