Apache-2.2

“重定向永久”與 mod_rewrite RewriteRule 之間的區別

  • December 21, 2015

這是一個 Apache httpd 2.2 伺服器。

我們要求通過 HTTPS 對訪問此網路伺服器的訪問進行加密。

當網路客戶端訪問我的網站http://www.example.org/ $foo (埠 80)時,我想將他們的請求重定向到https://www.example.org/ $foo 的 HTTPS 加密網站。

似乎有兩種常見的方法可以做到這一點:

第一種方法使用來自 mod_alias的“重定向”指令:

<VirtualHost *:80>
   Redirect permanent / https://www.example.org/
</VirtualHost>

第二種方法使用 mod_rewrite:

<VirtualHost *:80>
   RewriteEngine On
   RewriteCond %{HTTPS} off
   RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>

“重定向永久”和 mod_rewrite 節有什麼區別。一個比另一個好嗎?

預設情況下 mod_rewrite 執行“302 Found”重定向,這是臨時的。假設其他一切都相等,Redirect permanent則等於RewriteRule <blah> [R=permanent]

一個比另一個好嗎?

Apache 現在建議使用Redirectfrommod_alias而不是RewriteRulefrom mod_rewrite。請參閱https://httpd.apache.org/docs/current/rewrite/avoid.html#redirect,其中說:

當發現需要其他替代方案時,應將 mod_rewrite 視為最後的手段。在有更簡單的替代方案時使用它會導致配置混亂、脆弱且難以維護。

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