博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HTTP POST请求的Apache Rewrite规则设置
阅读量:6115 次
发布时间:2019-06-21

本文共 1625 字,大约阅读时间需要 5 分钟。

        最近自测后端模块时有个业务需求需要利用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实现正常的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.  
2.  
3.  
4.  
5.  

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

 

转载地址:http://jtvka.baihongyu.com/

你可能感兴趣的文章
PHP读取日志里数据方法理解
查看>>
第五十七篇、AVAssetReader和AVAssetWrite 对视频进行编码
查看>>
Vivado增量式编译
查看>>
一个很好的幻灯片效果的jquery插件--kinMaxShow
查看>>
微信支付签名配置正确,但返回-1,调不出支付界面(有的手机能调起,有的不能)...
查看>>
第二周例行报告
查看>>
多线程条件
查看>>
黄聪:VMware安装Ubuntu10.10【图解】转
查看>>
Centos 6.x 升级openssh版本
查看>>
公式推♂倒题
查看>>
vue实现点击展开,点击收起
查看>>
如何使frame能居中显示
查看>>
第k小数
查看>>
构建之法阅读笔记三
查看>>
写给对前途迷茫的朋友:五句话定会改变你的人生
查看>>
并行程序设计学习心得1——并行计算机存储
查看>>
JAVA入门到精通-第86讲-半双工/全双工
查看>>
bulk
查看>>
js document.activeElement 获得焦点的元素
查看>>
C++ 迭代器运算
查看>>