博客
关于我
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/

你可能感兴趣的文章
mysql中的数据导入与导出
查看>>
MySQL中的时间函数
查看>>
mysql中的约束
查看>>
MySQL中的表是什么?
查看>>
mysql中穿件函数时候delimiter的用法
查看>>
Mysql中索引的分类、增删改查与存储引擎对应关系
查看>>
Mysql中索引的最左前缀原则图文剖析(全)
查看>>
MySql中给视图添加注释怎么添加_默认不支持_可以这样取巧---MySql工作笔记002
查看>>
Mysql中获取所有表名以及表名带时间字符串使用BetweenAnd筛选区间范围
查看>>
Mysql中视图的使用以及常见运算符的使用示例和优先级
查看>>
Mysql中触发器的使用示例
查看>>
Mysql中设置只允许指定ip能连接访问(可视化工具的方式)
查看>>
mysql中还有窗口函数?这是什么东西?
查看>>
mysql中间件
查看>>
MYSQL中频繁的乱码问题终极解决
查看>>
MySQL为Null会导致5个问题,个个致命!
查看>>
MySQL为什么不建议使用delete删除数据?
查看>>
MySQL主从、环境搭建、主从配制
查看>>
Mysql主从不同步
查看>>
mysql主从同步及清除信息
查看>>