HTTP POST請求的Apache Rewrite規則設置

        最近自測後端模塊時有個業務需求須要利用WebServer(我用的是Apache)將HTTP POST請求轉發至後端C模塊,後端處理後返回2進制加密數據。http post請求的url格式爲:
            http://demo-domain/myuri?param1=p1&param2=p2
        因爲myuri非php文件,故要藉助Apache的rewrite功能將其「引流」至php腳本,由後者實現真正的代理功能。
        Apache的Rewrite功能由擴展模塊mod_rewrite.so實現,關於mode_rewrite的介紹,能夠參考Apache官方文檔
        不得不說,對於不熟悉Apache的新手(好比我)來講,仍是須要折騰一番的。好在最後終於搞定了,做爲筆記,記錄於此。
        大致來講,要使Apache實現正常的rewrite功能並實現HTTP POST請求的代理功能,須要如下2個步驟。
1. 啓用Apache的mod_rewrite擴展
         默認狀況下,Apache的擴展模塊中是包含mod_rewrite.so的,相應地,其conf/httpd.conf中也會有下面這行內容:
         #LoadModule rewrite_module modules/mod_rewrite.so
         mod_rewrite擴展默認未啓用,咱們只需將#註釋符去掉,啓用該擴展模塊便可。
2. 開啓RewriteEngine並配置RewriteRule
         在httpd.conf文件最後部分添加下面2行內容:
           RewriteEngine ON
           RewriteRule ^/myuri.*$ /myproxy.php
         這樣就將url的方法名爲myuri的http請求rewrite至myproxy.php腳本,由後者實現http proxy功能。
         須要注意的幾點:
         1)因爲個人業務需求是在服務器級作rewrite,故只需修改httpd.conf相關配置項,無需修改<Directory /> section中的AllowOverride配置,若是要用.htaccess文件實現目錄級的局部rewrtie,則爲保證rewrite功能正常使用,須要設置AllowOverride選項。
         關於AllowOverwrite的說明,可參考官網文檔。關於什麼時候須要利用.htaccess實現rewrite,這篇文章有解釋,此處再也不贅述。
         2)配置RewrtieRule時,這篇文章提到想要實現POST數據的rewrite,必須設置P Flag,表示force proxy。但個人測試結果代表,不設置P時http post的rewrite能夠正常work,相反,若是設置了P flag(在RewriteRule行尾明確指定RewriteRule flag爲[P]),則須要下面的第三步設置才能正常實現post的rewrite。囧。。。
         3)關於RewriteRule衆多flags的含義,可參考這裏
        通過上面2步,重啓Apache後,rewrite功能就可使用了,測試代表HTTP GET/POST請求的rewrite正常,符合預期。
        不過若在RewriteRule中指定[P],則post方式的rewrite還須要啓用Apache的proxy擴展,如本文第3步所述。
3. 啓用Apache的proxy擴展是否須要該步設置視RewriteRule是否指定P flag而定
         在httpd.conf中啓用下面2個擴展模塊以實現http post的proxy功能(默認未啓用,去掉#註釋啓用便可):
             LoadModule proxy_module modules/mod_proxy.so
             LoadModule proxy_http_module modules/mod_proxy_http.so
         注:經測試,上面兩個擴展缺一不可php

【參考資料】
1. Apache Module mod_rewrite 
2. Apache Rewrite 規則詳解 
3. Apache Rewrite 規則的常見應用 
4. Windows主機:Apache啓用rewrite和.htaccess 
5. Apache之AllowOverride參數詳解 html

=============== EOF ===============apache

相關文章
相關標籤/搜索