我一直在寻找能够强制https://
的代码片段。我发现了这个:
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
问题是当我想在本地工作时,如“localhost”或“example.dev”这样的网址会尝试重定向到https://localhost
(它不起作用)。
我该如何解决这个问题?
(总而言之,我希望上面的代码片段仅在我用于制作时才能使用,例如“example.com”)
答案 0 :(得分:12)
我希望上面的代码段仅在我用于制作时才能使用,例如
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]
答案 1 :(得分:1)
这有些先进,但您可以尝试将服务器放入 一个名为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重写行为的差异。我会版本的 git或subversion中的.htaccess(你曾经使用过) 在这种情况下。
这主要用于负载平衡,但您可以在机制中应用它。
答案 2 :(得分:0)
对于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>