设为首页 收藏本站
查看: 1213|回复: 1

[经验分享] HTTP POST请求的Apache Rewrite规则设置

[复制链接]

尚未签到

发表于 2015-8-4 10:02:43 | 显示全部楼层 |阅读模式
          最近自测后端模块时有个业务需求需要利用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相关配置项,无需修改 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 ===============
  

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-93963-1-1.html 上篇帖子: 定制Apache索引样式 下篇帖子: apache 多站点配置(httpd.conf简单示例)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表