Mod-Rewrite

沒有http正文的apache2 mod_rewrite重定向

  • April 12, 2018

我目前正在使用 Apache mod_rewrite 重定向到 HTTPS,但我想從響應中刪除正文。

目前情況如何:

目前響應

範例:我希望它是怎樣的

期望的響應

我的重定向配置:

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

您可以為 301 響應定義一個自定義的 ErrorDocument,您可以在其中設置一個空響應。(儘管為非錯誤指定自定義“錯誤文件”,即對於 4xx 或 5xx 狀態以外的任何內容,都沒有明確記錄。)

例如:

ErrorDocument 301 /errordocs/empty.html

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

從字面上看,哪裡/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伺服器變數是不必要的。這對返回的錯誤文件沒有影響。

引用自:https://serverfault.com/questions/906014