博客
关于我
apache重写规则自动追加查询参数QSA
阅读量:778 次
发布时间:2019-03-25

本文共 1585 字,大约阅读时间需要 5 分钟。

Apache RewriteRule的精髓:QSA参数的神奇之处

很多开发者在搭建网站时都遇到过类似的问题:希望通过URL重写实现某种功能,但总是拿不到匹配的参数。有时候,情况会变得相当棘手,尤其是当你需要处理大量查询参数时。

写URL重写规则的坑丹经历

早在搭建搜索功能时,我便遇到了这样的问题。通过观察其他大型网站的搜索页面URL格式,我发现大多数都会遵循类似的规则。例如:

search_goods.html?keyword=手机&page=1
search_goods.html?q=%BF%D5%C6%F8%BE%BB%BB%AF%C6%F7&type=p

于是,我便想着直接定义一个重写规则来处理这些请求。最初的想法很简单:

RewriteRule ^search_goods.html\?(.*)$ index.php?ctl=search&act=goods&$1 [L]

但经过实际操作,我发现这个规则根本无法捕获任何参数。后来,我才发现问题出在Apache的RewriteRule标识符中有一个特殊的参数——QSA(Query String Append的缩写)。一旦添加了这个参数,问题便迎刃而解。最终,我的规则变为了:

RewriteRule ^search_goods.html$ index.php?ctl=search&act=goods [QSA,L]

这一改变使得我不再需要手动编写复杂的正则表达式,也避免了曾经遇到的参数获取问题。

Apache的QSA参数——轻松搞定URL重写

与其他服务器配置(如IIS的isapi_rewrite或Nginx)不同,Apache的QSA参数提供了一个直观的解决方案。它的作用是将URL中的查询字符串参数直接附加到目标URL中,无需额外编写正则规则。更重要的是,QSA不会对现有参数进行重写或造成参数丢失。

这里有一个有趣的现象:如果你在目标URL中已经包含?QSA依然会保留原有参数并添加新的参数。这意味着,即使目标URL本身是带有参数的,QSA也不会产生任何冲突。

以下是一个实际测试示例:

RewriteRule ^search_goods.html$ index.php?ctl=search&act=goods [QSA,L]

当访问search_goods.html?q=手机时,最终会转发到:

index.php?ctl=search&act=goods&q=手机

这个过程完全透明,且无需额外的正则规则,这就是QSA的魅力所在。

IIS与Nginx的处理方式

需要指出的是,QSA参数仅适用于Apache服务器。大多数其他服务器配置则有所不同:

  • IIS:在IIS中,重写规则对参数的处理方式与Apache有所不同。这意味着在转换URL时,参数的附加方式可能需要额外的配置。通常,可以通过设置特定的isapi_rewrite规则来实现类似的功能。

  • Nginx:对于Nginx来说,处理URL重写更为灵活。你可以通过rewrite指令结合qa参数来实现类似的功能。例如:

    rewrite ^/search_goods.html$ /index.php?ctl=search&act=goods break;

    这里的break参数会确保重写后的URL不会保留原有的查询字符串。

小结与未来计划

通过本文的研究和实践,我们可以得出一条重要的结论:QSA参数是一个极为实用的工具,它能够简化URL重写规则的编写。在实际项目中,我将继续探索Apache的其他高级功能,特别是针对不同WWW服务器的配置差异。

如果你还有其他关于URL重写的问题或者对Apache的其他配置感兴趣,欢迎随时留言交流。也许下次,我们可以一起研究如何利用Apache的mod_rewrite模块实现更多技巧性的事情。

转载地址:http://pnduk.baihongyu.com/

你可能感兴趣的文章
php生成二维码到图片上
查看>>
php生成二维码并下载图片(适应于框架)
查看>>
PHP生成及获取JSON文件的方法
查看>>
php的四大特性八大优势
查看>>
PHP索引数组unset的坑-array_values解决方案
查看>>
PHP索引数组排序方法整理(冒泡、选择、插入、快速)
查看>>
PHP线程安全和非线程安全
查看>>
R3LIVE开源项目常见问题解决方案
查看>>
php缃戠珯,www.wfzwz.com
查看>>
php缓存查询函数
查看>>
php编写TCP服务端和客户端程序
查看>>
php编码规范
查看>>
PHP编码规范-PSR1、psr2 /psr3 psr4
查看>>
PHP编程效率的20个要点
查看>>
PHP网页缓存技术优点及代码
查看>>
PHP自动化测试(一)make test 和 phpt
查看>>
php自定义函数: 文件大小转换成智能形式
查看>>
php英语单词,php常用英语单词,快速学习php编程英语(6)
查看>>
R3.4.0安装包时报错“需要TRUE/FALSE值的地方不可以用缺少值”,需升级到R3.5.0
查看>>
PHP获取curl传输进度
查看>>