
如何以及在何處將 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 設定檔中。