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表示使用自定义脚本。现在这个版本总算正常运作了。
推荐阅读
This guide provides a comprehensive step-by-step approach to successfully installing the MongoDB PHP driver on XAMPP for macOS, ensuring a smooth and efficient setup process. ...
[详细]
蜡笔小新 2024-12-27 19:58:25
本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ...
[详细]
蜡笔小新 2024-12-27 19:31:05
本文介绍如何在PHPCMS V9中创建和管理多个站点,包括配置独立域名、设置动态URL,并确保各子站能够正常运行。我们将详细讲解从新建站点到最终配置路由的每一步骤。 ...
[详细]
蜡笔小新 2024-12-27 05:15:58
网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ...
[详细]
蜡笔小新 2024-12-26 14:35:04
2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ...
[详细]
蜡笔小新 2024-12-26 12:56:20
本文介绍如何解决在 IIS 环境下 PHP 页面无法找到的问题。主要步骤包括配置 Internet 信息服务管理器中的 ISAPI 扩展和 Active Server Pages 设置,确保 PHP 脚本能够正常运行。 ...
[详细]
蜡笔小新 2024-12-28 11:54:54
本文介绍了 Python 3.4 版本引入的标准库 asyncio,该库为异步 IO 提供了强大的支持。我们将探讨为什么需要 asyncio,以及它如何简化并发编程的复杂性,并详细介绍其核心概念和使用方法。 ...
[详细]
蜡笔小新 2024-12-28 11:52:00
探讨一个老旧 PHP MySQL 系统中,时间戳字段不定期出现异常值的问题及其可能原因。 ...
[详细]
蜡笔小新 2024-12-28 11:46:54
尽管商业智能(BI)工具在中国的普及程度尚不及国际市场,但近年来,随着本土企业的持续创新和市场推广,国内主流BI工具正逐渐崭露头角。面对国际品牌如Tableau的强大竞争,国内BI工具通过不断优化产品和技术,赢得了越来越多用户的认可。 ...
[详细]
蜡笔小新 2024-12-28 11:12:44
本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ...
[详细]
蜡笔小新 2024-12-28 10:36:30
本文将详细解读郑州大学作为一所位于河南省的211和双一流B类高校,在全国211高校中的地位与排名,帮助高三学生更好地了解这所知名学府的实力与发展前景。 ...
[详细]
蜡笔小新 2024-12-28 10:08:34
本文介绍如何使用 Oracle 存储函数查询特定员工的年收入。我们将详细解释存储函数的创建过程,并提供完整的代码示例。 ...
[详细]
蜡笔小新 2024-12-28 09:49:42
本文探讨如何利用ASM框架进行字节码操作,以优化现有类的转换过程,简化复杂的转换逻辑,并移除不必要的加0操作。通过这些技术手段,可以显著提升代码性能和可维护性。 ...
[详细]
蜡笔小新 2024-12-28 09:35:00
本文总结了2018年的关键成就,包括职业变动、购车、考取驾照等重要事件,并分享了读书、工作、家庭和朋友方面的感悟。同时,展望2019年,制定了健康、软实力提升和技术学习的具体目标。 ...
[详细]
蜡笔小新 2024-12-28 09:10:26
本文介绍了如何使用 CSS 实现液态的三栏布局,其中各栏具有不同的宽度设置。通过调整容器和内容区域的属性,可以实现灵活且响应式的网页设计。 ...
[详细]
蜡笔小新 2024-12-28 02:40:28
另df外一个自我_198
这个家伙很懒,什么也没留下!