apache2 mod_rewrite 重定向无 http 主体

apache2 mod_rewrite 重定向无 http 主体

我目前正在使用 Apache mod_rewrite 重定向到 HTTPS,但我想从响应中删除正文。

目前的情况:

当前响应

例如:我希望它如何

期望响应

我的重定向配置:

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteCond %{HTTPS} off
  RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

答案1

您可以为 301 响应定义自定义 ErrorDocument,在其中设置空响应。(尽管没有明确记录为非错误(即除 4xx 或 5xx 状态以外的任何状态)指定自定义“错误文档”。)

例如:

ErrorDocument 301 /errordocs/empty.html

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Where/errordocs/empty.html实际上是一个空文档。

或者,你可以ErrorDocument细绳。但是您不能设置一个完全为空的字符串,因为 Apache 看不到第二个参数并终止并显示错误:“ErrorDocument 需要两个参数”。但是,您可以将其缩减为一个字符。例如,要-在响应主体中仅发送连字符 ( ):

ErrorDocument 301 "-"

但是,这确实设置了响应主体全部Apache 301 响应。(但是,如果这是在服务器配置中端口 80 的 VirtualHost 容器中,那么无论如何这都会被限制为仅 HTTP 重定向。)

参考:这是对 StackOverflow 问题的回答更详细地从 Apache 返回空响应

然而,正如@MichaelHampton 在评论中指出的那样,你是否应该发送重定向时响应主体为空则是另外一回事。

它位于服务器配置(.conf 文件)中

在旁边:如果这是在服务器配置中,那么您应该Redirect在非 HTTPS(端口 80)VirtualHost 容器中使用简单的 mod_alias,而不是 mod_rewrite。在此上下文中使用 mod_rewrite 来明确检查HTTPS服务器变量是不必要的。这对返回的错误文档没有影响。

相关内容