Owe*_*ker 4 mod-rewrite mod-ssl apache-2.2
我想我已经排序了(主要是由于问题How to redirect non-www to www without hardcoding using .htaccess?),但我仍然不完全理解一些事情。
我想强制所有到我的服务器的非 SSL 连接都路由到 SSL。我只有一个虚拟主机(并且在服务器的生命周期内可靠地保持这种情况),但我想避免对域名进行硬编码,部分原因是httpd.conf为了暂存和生产的文件保持相同。
我知道我可以强制请求使用 SSL 和mod_rewrite类似的规则
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)
或者
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)
不过,我有两个相对简单的问题:
RewriteCond出于任何原因,我是否应该更喜欢这些陈述中的一个?据推测,如果我使用该%{SERVER_PORT}变量,任何连接,例如,端口 8000 将继续以明文方式提供服务?有什么原因我应该避免使用%{HTTPS}我忽略的变量吗?%{HTTP_HOST}中的该变量是否RewriteRule会受到尊重并自动替换Host:来自请求的任何标头?在某些情况下这可能不起作用吗?以防万一,我们在 RedHat 上运行 Apache 2,mod_ssl站点使用 Drupal 7。
对不起,这是一个相对愚蠢的问题;Apache 系统管理员绝不是我工作的核心部分,所以我正在尽我所能地努力解决。谢谢大家!
我一直使用类似以下的东西:
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)
因为偶尔,我喜欢在 80 以外的端口上提供 HTTP 服务。嗯,我不喜欢这样做,但有时需要必须等
%{HTTPS},例如,如果在端口 80 上使用 SSL。
我想我通常使用
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Run Code Online (Sandbox Code Playgroud)
%{HTTP_HOST}将始终是Host:客户端设置为标头的任何内容。
然而,我突然想到……还有另一种方法可以做到这一点。
<VirtualHost *:80>
ServerName mysite.example.com
Redirect permanent / https://mysite.example.com/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
您会注意到上面的块中没有 DocumentRoot。如果您要重定向所有内容,则不需要一个。
如果您只想将网站的一部分重定向到 SSL,您可以这样做
Redirect permanent /secure https://mysite.example.com/secure
Run Code Online (Sandbox Code Playgroud)
我认为重定向选项对于全站点 HTTPS 强制更可取,因为它的疯狂程度降低了一级(由 mod_rewrite 提供)。
它甚至可能更快,因为加载/运行的模块会少一个。
| 归档时间: |
|
| 查看次数: |
7926 次 |
| 最近记录: |