我的系统是 Centos 7 和 Apache 2.4.6
我需要使用 Apache httpd.conf 将 http 重定向到 https,我在 Google 上搜索了数百页,找到了一些代码,但这个很好,而且不是硬编码的数字海洋但它在 URL 末尾返回双斜杠,并且这是不同重定向结果的图像
<VirtualHost IP:80>
# https/http www -> https non-www
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
# http non-www -> https non-www
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
</VirtualHost>
<VirtualHost IP:443>
# I removed this from 443 and the same result
# https/http www -> https non-www
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
</VirtualHost>
答案1
这是因为您抓住了 (.*) 中的第一个斜线:
重写规则 ^(.*)$https://%1/1 美元 [右=301,左]
这种正则表达式用于每个目录上下文中,其中第一个斜杠未使用且不适用,在虚拟主机上下文中存在第一个斜杠,因此您可以使用 (.*) 捕获它并将其添加到结果中。
因此,在虚拟主机上下文中执行此操作的最典型和正确的方法之一是在捕获组前手动添加斜线:
RewriteRule ^/(.*) https://%1/$1 [R=301,L]
注意:我删除了“$”,因为当你捕获所有内容时,不需要指定“结束”。