我可能只是需要一些额外的见解,因为我不知道我哪里做错了。我使用 SSL 证书来保护我们的 nagios 服务器。我们希望明确要求所有通过 nagios 的流量(比如 2 个用户,哈哈)都使用 SSL。
所以我想,哦,.htaccess 中的 mod_rewrite + 重写规则,对吗?
因此我进入 DocumentRoot 并执行了 vi .htaccess(尚不存在),然后我输入了以下规则;
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://our.server.org/$1 [R,L]
这根本就没什么用。什么用都没有。
为啥……
注意:httpd.conf 中的 AllowOverride all 已打开。此外,我已验证模块未被取消注释...但请注意,我找不到已安装的 mod_rewrite 模块,因此我从另一台服务器复制了它并将其放在 modules/mod_rewrite.so 中。这很奇怪,因为它在 httpd.conf 文件中已启用,但在模块中却不存在...
我是个坏人 :(
答案1
以下是我的完整重定向非 SSL VirtualHost:
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName www.example.com
ServerAlias example.com
RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteRule ^/(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
LogLevel warn
CustomLog /var/log/apache2/access.log vhost_combined
ErrorLog /var/log/apache2/error.log
</VirtualHost>
这属于 Apache 配置,而不是.htaccess
。
主要的区别在于我们的RewriteCond
线路,你的是%{SERVER_PORT} 80
,我的是%{HTTPS} !=on
。
答案2
如果您设置了两个不同的 vhost 条目,则执行以下操作会容易得多。
Redirect permanent / https://our.server.org/
在非 SSL 虚拟主机中。不用担心,这将覆盖所有输入的 uri。