【问题标题】:Force HTTPS on .htaccess but only on production在 .htaccess 上强制使用 HTTPS,但仅限于生产环境
【发布时间】:2020-11-03 13:10:23
【问题描述】:

我一直在寻找可以强制https:// 的sn-p 代码。我发现了这个:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

问题是当我想在本地工作时,像“localhost”或“example.dev”这样的 URL 会尝试重定向到 https://localhost(它不起作用)。

我该如何解决这个问题?

(总而言之,我希望上面的 sn-p 仅在我在生产中使用时才起作用,例如“example.com”)

【问题讨论】:

    标签: regex apache .htaccess mod-rewrite https


    【解决方案1】:

    我希望上面的 sn-p 仅在我在生产中使用时才能工作,例如 example.com)

    您可以使用重写条件将规则限制为仅针对 example.com

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

    【讨论】:

    • 在有或没有 www 的情况下可以使用吗?那么两者都会强制使用 SSL?
    【解决方案2】:

    这有点高级,但您可以尝试将服务器放入 一个名为 servers.txt 的文件

    RewriteEngine on
    RewriteMap lb rnd:servers.txt
    RewriteRule ^/(.*) http://${lb:servers}/$1 [P,L]
    serverlist.txt will contain a list of the servers:
    
    ## serverlist.txt file con
    servers localhost.example.com|server1.example.com
    

    上面的答案对于本地和生产来说已经足够好了 mod重写行为的差异。我会版本 .htaccess 在 git 或 subversion 中(无论你使用哪个) 在这种情况下。

    这主要用于负载平衡,但您可以将其应用到您的机制中。

    【讨论】:

      【解决方案3】:

      对于 Apache,请将您的规则放在 <IfModule mod_ssl.c></IfModule> 块中,并在您的本地服务器上禁用 ssl 模块。

      <IfModule mod_ssl.c>
        RewriteEngine On
        RewriteCond %{HTTPS} !=on
        RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
      </IfModule>
      

      【讨论】:

        猜你喜欢
        • 2012-05-29
        • 2014-06-07
        • 2012-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-17
        • 2016-11-12
        • 1970-01-01
        相关资源
        最近更新 更多