Apache服务器的rewritemap配置说明
作者:另df外一个自我_198 | 来源:互联网 | 2014-05-28 10:53
在apache的环境下,rewrite还真是生活之友啊,时不时就得用上。前些日子有个需求,要将url重新转一转。什么情况?原来的urlhttp://www.xxx.com/demo/oldpage.php?param11param22转换后的urlhttp://www.xxx.com/newpage.php?url%2
在apache的环境下,rewrite还真是生活之友啊,时不时就得用上。前些日子有个需求,要将url重新转一转。
什么情况?
原来的url
http://www.xxx.com/demo/oldpage.php?param1=1¶m2=2
转换后的url
http://www.xxx.com/newpage.php?url=%2Fdemo%2Fmypage.php%3Fparam1%3D1¶m2%3D2
需要把粗体部分的url进行urlencode,能看出上面的字符"?&="都分别转义过,作为参数发给另外一个url。那么这时候请出rewrite还真是最合适不过了。
坎坷的Rewrite经历
查查rewrite手册,俺这才知道,转义这活,非得派出RewriteMap的map
function才能做的比较漂亮。现在只有四个内部map function可供差遣:
toupper: Converts the key to all upper case.
tolower:
Converts the key to all lower case.
escape: Translates special characters in the key to
hex-encodings.
unescape: Translates hex-encodings in the key back to special
characters.
那么很快就有了第一个rewrite出现:
RewriteMap escape int:escape
RewriteRule ^/([^/]*)$
/newpage.php?mi_url_suffix=${escape:$1?%{QUERY_STRING}}
[L,PT]
注:这里的int不是intger的意思,它是internal的缩写,表示调用内部函数。
看上去非常简单,跑起来貌似也正....常?且慢,俺打开RewriteLog一瞅,形式不容乐观啊,"&"字符通通没有转义。看来是失败了,爬到狗狗上翻了一下,貌似escape对"?="之类的特殊字符是不做转义的,晕。
RewriteMap到底
接着细看apache的rewrite手册,发现RewriteMap还支持自定义脚本,那么还得使出俺的看家绝技——php了。首先弄一个能转义的php,必须非常简单,复杂了apache容易挂掉,写出来发现想复杂都挺难啊:
/usr/local/bin/escape.php
PHP:
#!/usr/bin/php -f
while($in = trim(fgets(STDIN)))
fputs(STDOUT, urlencode($in) .
"\r\n");
?>
在这个脚本里可别使用php:://stdin之类的,具体原因查php手册。相应的,rewrite规则如下:
RewriteMap escape prg:/usr/local/bin/escape.php
RewriteRule ^/([^/]*)$
/newpage.php?mi_url_suffix=${escape:$1?%{QUERY_STRING}}
[L,PT]
rewrite规则没有太大的改变,prg表示使用自定义脚本。现在这个版本总算正常运作了。
推荐阅读
本文档提供了首次周测的答案解析,涵盖特殊符号、命令作用、路径说明以及实战练习等内容。 ...
[详细]
蜡笔小新 2024-11-25 14:28:11
本文详细记录了在华为云openEuler系统上进行Web应用部署的具体步骤,包括配置yum源、安装Apache、MariaDB、PHP及其相关组件,并完成WordPress的安装与配置过程。 ...
[详细]
蜡笔小新 2024-11-25 12:39:31
本文详细介绍了在PHP中如何获取和处理HTTP头部信息,包括通过cURL获取请求头信息、使用header函数发送响应头以及获取客户端HTTP头部的方法。同时,还探讨了PHP中$_SERVER变量的使用,以获取客户端和服务器的相关信息。 ...
[详细]
蜡笔小新 2024-11-24 16:12:27
本文介绍了如何利用 Spring MVC 中的 ModelAttribute 注解,在页面跳转后自动填充表单数据。主要探讨了两种实现方法及其背后的原理。 ...
[详细]
蜡笔小新 2024-11-24 12:55:24
本文介绍了如何通过安装和配置php_uploadprogress扩展来实现文件上传时的进度条显示功能。通过一个简单的示例,详细解释了从安装扩展到编写具体代码的全过程。 ...
[详细]
蜡笔小新 2024-11-24 00:04:13
Mysqlcheck作为MySQL提供的一个实用工具,主要用于数据库表的维护工作,包括检查、分析、修复及优化等操作。本文将详细介绍如何使用Mysqlcheck工具,并提供一些实践建议。 ...
[详细]
蜡笔小新 2024-11-25 18:41:02
探讨Linux系统中PCI设备的I/O地址与内存映射的区别及其实现方式。 ...
[详细]
蜡笔小新 2024-11-25 18:30:37
LIN(Local Interconnect Network)总线是一种基于UART/SCI(通用异步收发器/串行接口)的低成本串行通信协议,主要用于汽车车身网络中智能传感器和执行器之间的通信。 ...
[详细]
蜡笔小新 2024-11-25 17:49:58
本文详细介绍了mt_allocator内存分配器在多线程和单线程环境下的实现机制。该分配器以2的幂次方字节为单位分配内存,支持灵活的配置和高效的性能。文章分为内存池特性描述、内存池实现、单线程内存池实现、内存池策略类实现及多线程内存池实现等部分,深入探讨了内存池的初始化、内存分配与回收的具体实现。 ...
[详细]
蜡笔小新 2024-11-25 17:44:11
在使用KVM虚拟化技术通过NAT模式启动虚拟机时,可能会遇到qemu-ifup-nat脚本执行失败的错误。本文将详细介绍如何诊断和解决这一问题。 ...
[详细]
蜡笔小新 2024-11-25 17:27:02
本文探讨Node.js模块化的重要性和具体实现方式,包括其带来的代码复用性增强、可维护性提升、以及如何有效避免命名冲突等问题。 ...
[详细]
蜡笔小新 2024-11-25 16:16:46
奔驰定理是一种有趣的数学定理,其证明通常涉及几何或三角函数。然而,是否存在一种基于向量的方法来证明该定理呢?答案是肯定的。由于面积与向量的外积密切相关,因此可以通过向量外积来证明奔驰定理,并揭示其中的倒格矢结构。 ...
[详细]
蜡笔小新 2024-11-25 15:37:47
本文介绍了Linux内核中TCP的三种接收队列:Prequeue、sk_receive_queue和Backlog。这些队列在数据包处理过程中扮演着重要角色,帮助提高系统性能和效率。 ...
[详细]
蜡笔小新 2024-11-25 15:21:17
GitHub作为开发者不可或缺的工具,不仅提供了丰富的开源项目资源,还极大地便利了个人项目的管理和版本控制。本文将详细介绍如何使用Git GUI工具将本地开发的项目上传至GitHub。 ...
[详细]
蜡笔小新 2024-11-25 14:33:53
在日常运维中,频繁地对多台Linux服务器进行用户管理是一项耗时的任务。为了提高效率,可以通过编写Expect脚本来实现远程自动化操作,从而简化这一过程。 ...
[详细]
蜡笔小新 2024-11-25 13:52:06
另df外一个自我_198
这个家伙很懒,什么也没留下!