代码之家  ›  专栏  ›  技术社区  ›  imagina

合并两个。htaccess指令整合为一个

  •  1
  • imagina  · 技术社区  · 6 年前

    我的站点根目录中有两条指令。htaccess文件。

    第一个的目的是将所有非www请求重定向到www:

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

    第二种方法的目的是将所有非SSL请求重定向到SSL:

    RewriteEngine On
    RewriteCond %{HTTPS} !=on
    RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
    

    有没有办法把这些合并成一个单一的。htaccess指令?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Amit Verma    6 年前

    您可以使用以下规则来强制 https www 在单个请求中:

    RewriteEngine on
    
    RewriteCond %{HTTPS} !=on [OR]
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$
    RewriteRule ^.*$ https://www.%1%{REQUEST_URI} [R,L]
    

    请注意,上面的规则还将子域重定向到https。如果不想将规则应用于子域,可以使用重写条件将其排除。如果有子域,请在RewriteRule指令上方放置以下行

    RewriteCond %{HTTP_HOST} !^(sub1\.domain\.com|sub2.domain.com)$ 
    

    完整代码

    RewriteCond %{HTTPS} !=on [OR]
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    #exclude sub.example.com
    RewriteCond %{HTTP_HOST} !^sub\.example.com$
    RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$
    RewriteRule ^.*$ https://www.%1%{REQUEST_URI} [R,L]