如何使用 mod_rewrite 同时禁用跟踪和重定向到 https?

如何使用 mod_rewrite 同时禁用跟踪和重定向到 https?

我有一台装有 apache 2.0.52 的 RHEL4 服务器。我想在一个虚拟主机中同时禁用跟踪方法并将所有 http 请求重定向到 https。我已完成以下操作。

RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^TRACE
RewriteRule .* - [F]
RewriteCond %{HTTPS} !=on
RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [L,R]

这两个重写规则独立工作。但放在一起时,跟踪方法不会被禁用。通过 telnet 跟踪的输出为

HTTP/1.1 302 Found
Date: Mon, 02 Nov 2009 01:34:04 GMT
Server: Apache/2.0.52 (Red Hat)
Location: https://192.168.0.174/error/noindex.html
Content-Length: 304
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>302 Found</title>
</head><body>
<h1>Found</h1>
<p>The document has moved <a href="https://192.168.0.174/error/noindex.html">here</a>.</p>
<hr>
<address>Apache/2.0.52 (Red Hat) Server at 192.168.0.174 Port 80</address>
</body></html>
Connection closed by foreign host.

答案1

我不记得我是如何弄清楚的,但以下重写规则有效。顺序是 - 首先应该存在 https 重定向规则,然后应该存在跟踪禁用规则。我还删除了 https 重定向规则中的 L,因为它是第一条规则。所以最终重写规则如下所示:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [R]
RewriteCond %{REQUEST_METHOD} ^TRACE
RewriteRule .* - [F]

答案2

[L]如果您希望请求在那里停止,则需要将最后一个标志应用到您的第一条规则。

如果你希望TRACE完全禁用请求(服务器范围),那么你可能需要使用TraceEnable指令。

答案3

我完全不知道你为什么要使用 mod_rewrite 来实现这一点。有一个简单的指令可以允许或拒绝 HTTP 方法 TRACE:跟踪启用

相关内容