![如何编写 Apache Rewrite 规则以将对目录的请求重定向到 SSL?](https://linux22.com/image/711390/%E5%A6%82%E4%BD%95%E7%BC%96%E5%86%99%20Apache%20Rewrite%20%E8%A7%84%E5%88%99%E4%BB%A5%E5%B0%86%E5%AF%B9%E7%9B%AE%E5%BD%95%E7%9A%84%E8%AF%B7%E6%B1%82%E9%87%8D%E5%AE%9A%E5%90%91%E5%88%B0%20SSL%EF%BC%9F.png)
我正在尝试将服务器上某个目录内的所有请求重定向到 https。我已在单独的配置(在 config.d 目录中)和 .htaccess 文件中尝试了以下操作。两者都不起作用,但没有导致错误。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
当我在配置文件中尝试时,上述内容位于一个块内。
编辑
以下是我的配置文件中的代码:
<Directory "/var/www/html/ssl_dir/">
Options Indexes MultiViews FollowSymLinks
AllowOverride All
<RequireAny>
Require ip xx.xx.xx.0/24
Require ip ::1
</RequireAny>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
</Directory>
答案1
差不多了!
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
我的第一个答案错误地使用了 SERVER_NAME,它不一定等于 HTTP_HOST。服务器名称可以是任何名称,并且与用于访问它的域名有很大不同。