httpd 配置中的 mod_rewrite 規則

httpd 配置中的 mod_rewrite 規則

如何以及在何處將 mod_rewrite 規則放入 httpd 配置中,以便僅在啟動時解析它們一次,而不是每次讀取 Web 目錄中的檔案時解析它們。

附加資訊:

  • 假設所有腳本都在 .htaccess 檔案中執行
  • 運行 Apache 2.0.52 的 RHEL4
  • 機器上有多個子/域

謝謝

答案1

我不確定是否理解這個問題,但如果問題是「我目前在 .htaccess 檔案中有重寫規則,並希望將它們放入整個 apache 配置中」。您必須<Directory /path/to/directory/where/htaccess/is>在 apache 設定中新增一條指令並將 .htaccess 檔案的內容放入其中。

如果 .htaccess 位於 /srv/web/site1/folder1/ 中,則在 apache 設定檔中新增下列內容

<Directory /srv/web/site1/folder1>
Paste content of .htaccess here
</Directory>

答案2

答案都在這裡——它們只是沒有全部綁在一起。

如 memnoch_proxy 所說:

「每次請求都會讀取.htaccess 檔案中修改的規則。/etc/httpd/httpd.conf 和/etc/httpd/conf.d/* 不會。我使用服務httpd reload 觸發對這些檔案的新更改,該服務會發送SIGUSR1讓工人們能夠優雅地重新啟動。

所以在我看來,您正在使用 .htaccess 檔案來定義適用於您的網站和/或資料夾結構的重寫規則。

為了防止每次造訪目錄或頁面時重新讀取和重新解釋規則,需要將規則放置在網站的中央 Apache 設定檔中。

這些規則的位置會根據系統管理員如何佈置系統而變化;在 Red Hat Enterprise Linux 環境中,我建議您將它們放在名為的檔案中

重寫規則.conf
位於
/etc/httpd/conf.d

在具有預設 Apache 版本的系統上,您可能必須將它們放在

httpd.conf
文件位於
/usr/local/apache/conf

答案3

在您的 httpd.conf 檔案中,加入類似「include modrewrite.conf」的內容。然後在 moderewrite.conf 檔案中新增重寫規則。

如果未編譯,也要確保包含 mod_rewrite 模組。

答案4

每次存取伺服器上與規則相關的資源時都會處理 RewriteRules。無論規則放在哪裡,每次都會對其進行解析。

但是,如果您的意思是您不喜歡在每次資源請求時從磁碟讀取.htaccess 的開銷,那麼radius 的答案就是您想要的,並附加明顯的說明,即在放置其內容後刪除.htaccess檔案在主 apache 設定檔中。

相關內容