我有一个带有 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.
[L]
如果您希望请求停在那里,您需要将最后一个标志应用于您的第一条规则。如果您希望
TRACE
完全禁用请求(服务器范围),那么您可能希望使用该TraceEnable
指令。我完全不知道您为什么要为此使用 mod_rewrite 。有一个简单的指令用于允许或拒绝 HTTP 方法 TRACE: TraceEnable。
我不记得我是怎么想出来的,但那是愚蠢的。重写规则工作。顺序是 - 首先应该存在 https 重定向规则,然后应该存在跟踪禁用规则。我还删除了 https 重定向规则中存在的 L,因为它是第一条规则。所以最后重写规则看起来像: