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
         注:經測試,上面兩個擴展缺一不可

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

=============== EOF ===============


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM