apache 2.4,mod_proxy_fcgi 不支持 .htaccess,需要解決
我將 apache 2.4.7 與 mod_proxy_fcgi 一起使用,以通過 php 傳遞到 php-fpm(這將用於共享託管環境)。htaccess 對非 php 文件工作正常,但是一旦它通過 php 請求命中代理的重寫規則,htaccess 就會被忽略。
我知道為什麼會這樣。問題是:我該如何解決它?
問題我如何強制apache將對php文件的請求視為對本地文件的請求,然後通過代理它?
我花了很多時間研究這個問題,並給出了以下“答案”作為解決方案:
1)“使用 apache 配置而不是 .htaccess”是有效的解決方案,但不適用於共享主機環境(我不會將 apache 配置的訪問權限授予共享主機客戶;))。
2)“不要使用.htaccess,因為它有性能/安全/其他問題”,那麼共享主機客戶如何控制他們網站上的訪問/url重寫?此外,如果 .htaccess 不是必需的,我會簡單地使用 nginx。
3)“將代理的重寫規則放入” - 這是不正確的,它不起作用。
根據https://issues.apache.org/bugzilla/show_bug.cgi?id=54887,此行為似乎不是錯誤,而是“功能”
同時,從 Apache 2.4.10 開始提供另一個選項:通過 Handler 代理。請參閱 Apache 文件中的範例:mod_proxy_fcgi 範例
您還可以通過創建合適的處理程序傳遞來強制將請求作為反向代理請求進行處理。下面的範例配置將使用反向代理將 PHP 腳本的所有請求傳遞到指定的 FastCGI 伺服器。此功能在 Apache HTTP Server 2.4.10 及更高版本中可用。出於性能原因,您需要定義一個代表相同 fcgi:// 後端的工作人員。這種形式的好處是它允許 URI 到文件名的正常映射發生在伺服器中,並將本地文件系統結果傳遞給後端。以這種方式配置 FastCGI 時,伺服器可以計算出最準確的 PATH_INFO。
<Proxy "fcgi://localhost/"> ProxySet enablereuse=On </Proxy> <FilesMatch "\.php$"> SetHandler "proxy:fcgi://localhost:9000" </FilesMatch>
這允許 .htaccess 文件中的 RewriteRules 和身份驗證。全部重寫完成後,將請求傳遞給 php-fpm。
請注意,RewriteCond -U 會在執行實際重定向之前檢查 URI 是否正確,因此每個請求都會加倍!這可能會對性能產生嚴重影響,尤其是在負載較重的網站上。
我建議檢查 “RewriteOptions InheritBefore” ,這似乎解決了與 htaccess 繼承相關的任何問題,如下所述:
了解 htaccess 中的 apache 2.4 mod_proxy_fcgi 和 RewriteRules
乾杯,喬治