2 apache mod_rewrites 之间的区别

Eri*_*ric 1 apache mod-rewrite https redirect

我发现了 2 个不同的代码片段可以在我的网站上强制使用 https:

RewriteRule (.*) https://%{SERVER_NAME}/$1 [R,L]
Run Code Online (Sandbox Code Playgroud)

RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Run Code Online (Sandbox Code Playgroud)

我确信它们都可以工作(一个来自 Httpd Wiki,另一个来自 SSL shopper)。有人能够解释他们如何执行重定向的差异吗?

Pan*_*ack 5

他们只是使用不同的 Apache 变量来组成重定向的 URL。

RewriteRule (.*) https://%{SERVER_NAME}/$1 [R,L]
Run Code Online (Sandbox Code Playgroud)

如果输入了文件名(例如 myfile.php),则第一条规则将采用文件名,并附加重定向,并用它替换$1重定向,以便您获得https://somesite.com/myfile.php

RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Run Code Online (Sandbox Code Playgroud)

第二个使用%{HTTP_HOST}将从 http 标头中获取信息,而不是组成用于重定向的 URL,因此输入相同的 urlhttp://somesite.com/myfile.php将被重定向到https://somesite.com/myfile.php

只需告诉 apache 使用什么进行重定向即可。使用服务器内部名称或使用浏览器发送的名称。

%{SERVER_NAME}
Run Code Online (Sandbox Code Playgroud)

这是 apache 中的服务器内部变量,在服务器配置中定义。

%{HTTP_HOST}
Run Code Online (Sandbox Code Playgroud)

这是浏览器在 HTTP 请求标头中发送的内容。这是客户端,而如果SERVER_NAME来自服务器配置。

%{REQUEST_URI}
Run Code Online (Sandbox Code Playgroud)

REQUEST_URI是请求的 URI 的路径组成部分,例如“/index.html”。这是一个特殊的 Apache 变量。

已经采取了多种方法来重定向到,https并且两者都应该有效。你的选择。