![如何使用 mod_rewrite 同时禁用跟踪和重定向到 https?](https://linux22.com/image/497567/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20mod_rewrite%20%E5%90%8C%E6%97%B6%E7%A6%81%E7%94%A8%E8%B7%9F%E8%B8%AA%E5%92%8C%E9%87%8D%E5%AE%9A%E5%90%91%E5%88%B0%20https%EF%BC%9F.png)
我有一台装有 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:跟踪启用。