apache rewrite支持post数据

<IfModule mod_rewrite.c>
    Options +FollowSymlinks
    RewriteEngine On
    # 包含api及media
    RewriteCond %{REQUEST_FILENAME} "(api\.php|media\.php|Public)"
    RewriteRule ^(.*)$ http://www.17byh.com/$1 [R=301,L,P]
#    RewriteRule ^(.*)$ http://l.sys.17byh.com/index.php [R=301,P,L]


#    RewriteRule ^(.*)$ http://www.17byh.com/$1 [R=301,P,L]
#    RewriteRule ^(.*)$ http://l.sys.17byh.com/index.php/$1 [R=301,P,L]


#    RewriteCond %{REQUEST_FILENAME} !-d
#    RewriteCond %{REQUEST_FILENAME} !-f
#    RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]

</IfModule>


说明:eg: 请求http://l.17b/api.php/Home/game
RewriteCond %{REQUEST_FILENAME} "(api\.php|media\.php|Public)" #请求的文件名含有api.php或media.php或Public
RewriteRule ^(.*)$ http://www.17byh.com/$1 [R=301,L,P]

^(.*)$ : 将匹配api.php/Home/game   最终跳转到http://www.17byh.com/api.php/Home/game
$1 : 匹配(.*)的结果  实际上为:api.php/Home/game
R=301 :  永久性跳转
L :最后一次匹配规则
P : 强制使用代理转发 去掉P,可以跳转到具体地址,有P,看不到具体跳转到哪里



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



更多:http://www.phppan.com/2009/08/apache-url-rewrite-post-data/

          https://www.cnblogs.com/wajika/p/6605965.html

          https://blog.csdn.net/slvher/article/details/9136331


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值