【问题标题】:htaccess rewrite rules - domain/subdomain https/wwwhtaccess 重写规则 - 域/子域 https/www
【发布时间】:2017-08-19 12:22:48
【问题描述】:

我有我的主域和一个子域。子域位于主域根目录的子目录中,不能更改。主域有 SSL,而子域没有。

现在我试图对主域强制使用httpswww,对子域强制使用httpswww。所以最后主域不管它如何被访问应该重定向到https://www.example.com,同时子域应该是http://sub.example.com

访问它们的所有其他可能组合应重定向到上述 2。到目前为止,我成功地做到了这一点,但在我使用 https://sub.example.com 访问子域的情况下我没有这样做。它不会重定向到 http 版本,而是会尝试通过 https 加载页面,浏览器会抛出有关 SSL 的安全警告,如果我继续,它会通过子域和不安全警告加载主域站点的内容在浏览器上。

以下是我正在尝试的 htaccess 规则,在根目录的 htaccess 上,它影响主站点和子域。

如何改进它们并达到预期的结果?

RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} sub\.example\.com [NC]
RewriteRule ^(.*)$ http://sub.example.com/$1 [R=301,L]

RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} sub\. [NC]
RewriteRule ^(.*)$ http://sub.example.com/$1 [R=301,L]

RewriteCond %{HTTP_HOST} !^www\.example\.com [NC]
RewriteCond %{HTTP_HOST} !sub\. [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]

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

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

RewriteCond %{HTTP_HOST} www\.sub\. [NC]
RewriteRule ^(.*)$ http://sub.example.com/$1 [R=301,L]

【问题讨论】:

    标签: apache .htaccess mod-rewrite


    【解决方案1】:

    要仅将主域重定向到 https,您可以使用以下规则:

    RewriteEngine on
    
    #https to http (subdomain)
    RewriteCond %{HTTPS} on
    RewriteCond %{HTTP_HOST} ^sub.example.com$
    RewriteRule ^ http://sub.example.com%{REQUEST_URI} [NE,L,R]
     #main domain
    
    RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
    RewriteCond %{HTTPS} off
    RewriteCond %{HTTP_HOST} ^(?:www\.)?(example\.com)$
    RewriteRule ^ https://www.%1%{REQUEST_URI} [NE,L,R]
    

    【讨论】:

      猜你喜欢
      • 2012-06-11
      • 2021-07-31
      • 2010-09-26
      • 2011-11-21
      • 2012-07-31
      • 1970-01-01
      • 2013-05-23
      • 2014-03-06
      • 2018-06-02
      相关资源
      最近更新 更多