Mod-Rewrite
沒有http正文的apache2 mod_rewrite重定向
我目前正在使用 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
伺服器變數是不必要的。這對返回的錯誤文件沒有影響。