最近自测后端模块时有个业务需求需要利用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 ===============

HTTP POST请求的Apache Rewrite规则设置的更多相关文章

  1. Apache Rewrite 规则详解

    在开篇之前: 我想说这篇文章其实是我刚刚接触Rewrite的时候学习的文档,应属转载,但是在这里我不想写明原地址,原因是文章中大多数给出的配置命令经实验都是错误的.需要原文的可以在谷歌上搜索一下&qu ...

  2. apache rewrite 规则

    啥是虚拟主机呢?就是说把你自己的本地的开发的机子变成一个虚拟域名,比如:你在开发pptv下面的一个项目 127.0.0.1/pptv_trunk,你想把自己的机器域名变成www.pptv.com.那么 ...

  3. Apache Rewrite规则详解

    参考链接:http://slj.me/2009/04/apache-rewrite-regular/ 1.Rewrite规则简介 Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于Pe ...

  4. Apache Rewrite规则详解[转]

    1.Rewrite规则简介:Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于Perl语言.可基于服务器级的(httpd.conf)和目录级的(.htaccess)两种方式.如果要想用 ...

  5. .htaccess中的apache rewrite规则写法详解

    .htaccess中的apache rewrite写法: 1 RewriteEngine On 2 RewriteCond %{HTTP_HOST} ^(www\.)?xxx\.com$ 3 Rewr ...

  6. Apache Rewrite 规则详解知识大全

    Rewrite是一种服务器的重写脉冲技术,它可以使得服务器可以支持 URL 重写,是一种最新流行的服务器技术.它还可以实现限制特定IP访问网站的功能. 1.Rewrite标志 R[=code](for ...

  7. Apache Rewrite常用设置说明

    例子: RewriteEngine on 打开引擎 RewriteRule test.html /test.php [L] RewriteRule test.html?$ /tianqi.php?s1 ...

  8. .htaccess中的apache rewrite规则写法详解(未完)

    转:http://www.cnblogs.com/adforce/archive/2012/11/23/2784664.html http://blog.csdn.net/Long_Xiao_Yun/ ...

  9. Nginx与Apache的Rewrite规则的区别

    一.Nginx Rewrite规则相关指令 Nginx Rewrite规则相关指令有if.rewrite.set.return.break等,其中rewrite是最关键的指令.一个简单的Nginx R ...

随机推荐

  1. 《音乐商店》第4集:自动生成StoreManager控制器

    一.自动生成StoreManager控制器 二.查看 StoreManager 控制器的代码 现在,Store Manager 控制器中已经包含了一定数量的代码,我们从头到尾重新过一下. 1.访问数据 ...

  2. (step8.2.6)hdu 1848(Fibonacci again and again——组合博弈)

    题目大意:输入3个整数m,n,p,分别表示3堆石头中的石头个数 解题思路: 1)斐波那契数列的第16个数fib[16] == 1597 2)(sg[m]^sg[n]^sg[p])   .一定要加括号, ...

  3. 动态网页爬取例子(WebCollector+selenium+phantomjs)

    目标:动态网页爬取 说明:这里的动态网页指几种可能:1)需要用户交互,如常见的登录操作:2)网页通过JS / AJAX动态生成,如一个html里有<div id="test" ...

  4. 更好地认知Azure

    编辑人员注释:本文章由 Windows Azure 网站团队项目经理 Erez Benari 撰写. 我们的网站 http://www.windowsazure.com 包含大量信息,并且也在不断添加 ...

  5. iOS 使用Block实现函数回调

    事实上.iOS中的Block就是C++中的函数指针,实现方式都是一样的,以下贴出一个简单的实践. 首先,创建一个回调的类 BlockStudy.h // // BlockStudy.h // Bloc ...

  6. SQL Server截取字符串和处理中文技巧

    一 环境介绍 SQL  Server PRINT @@VERSION MicrosoftSQLServer2012-11.0.2100.60(X64) Feb10201219:39:15 Copyri ...

  7. EF 简单的 CRUD、分页 代码笔记

    添加: static void Main(string[] args)        {            CCDBEntities ccdbContext = new CCDBEntities( ...

  8. 基于visual Studio2013解决面试题之1101差值最小

     题目

  9. Java Swing界面编程(22)---事件处理:动作事件及监听处理

    要想让一个button变得有意义,就必须使用事件处理.在swing的事件处理中.能够使用ActionListener接口处理button的动作事件. package com.beyole.util; ...

  10. javascript 中 undefined 和 null 区别

    1.相同点 如果我们直接用 undefined == null  比较他们是相等的返回的将是 true. 2.区别 当我们用undefined === null 比较的时候最后返回的将是 false. ...