php 正则替换url参数,url Rewrite 重写时带“?”(问号)参数的传递

一,Rewrite重写时带“?”(问号)参数的传递

很多人都会遇到需要将网站以前的旧URL转换到新版本的新URL来,但是有一些带有参数的地址由于涉及到参数名的变更,需要通过伪静态的方式实现跳转。但Apache和Ngnix的方法是不支持带参数的URL地址重写的(即:RewriteRule不会去匹配“?”后面的字符串的,需要用RewriteCond来匹配)。

例如:把 /abc?id=123 重定向到 /def.php?id=123 的写法:

方式一:

RewriteEngine on

RewriteBase /

RewriteCond %{QUERY_STRING} ^id=(.+)RewriteRule ^/abc /def.php?sid=%1 [L]

#注释1:RewriteCond %{QUERY_STRING} ^id=(.+)$ ,得到url中的变量,并通过“%N”的方式获取(参数名可以重写,而且参数值可以匹配)

#注释2:RewriteCond 里面需要提取的值可以用 %N 进行反向引用值,而RewriteRule里面还是需要用$N的来反向引用值

方式二:

RewriteEngine on

RewriteBase /

RewriteRule ^/abc$ /def.php [L,QSA]

#注释1:[QSA]表示保留重写url时“?”后面的参数(但参数名不可以重写,只会原样的保留)

官方文档解释(查询字符串):

Pattern不会按照查询字符串进行匹配。为了达到这个目的,你必须使用一个带有% {QUERY_STRING}变量的RewriteCond指令。当然,你也可以在替换字符串中创建包含查询字符串的URL:在替换字符串串中使用问号,以标明其后的部分应该被重新注入到QUERY_STRING中。而要删除一个已有的请求串,则可以用问号来终结替换字符串。为了联合新旧查询字符串,请使用[QSA]标志。

二、apache rewrite 终结篇:apache %{QUERY_STRING}

1.n取得第n个参数值

RewriteRule ^sss/(.*)/(.*) zdz/index.php?arg1=1&arg2=2

2.query_string(%{QUERY_STRING}后为匹配的正则)

URL参数(Query String)是URL里面“?”后面的部分,它通常用于传输参数给CGI脚本或者其它动态页面。在Apache中,该值存储在环境变量QUERY_STRING中(在PHP中,可以通过_SERVER['QUERY_STRING']访问到)。

在Apache中,大多对URL进行操作的指令,如、Redirect、Alias和RewriteRule,都不能直 接访问该数据;不过,mod_rewrite模块却可以对URL参数进行添加、删除和修改。其中的关键就是使用RewriteCond来匹配% {QUERY_STRING}变量,如果需要的话,还可以使用[QSA]标志来附加URL参数。

eg.1

如果 http://piaoyun.cc/rewrite/jeecn.zdz?par=helloforbworld 中的 query_string 包含字符串forb ,则禁止访问

RewriteCond %{QUERY_STRING} forb

RewriteRule ^(.*)\.(.*) preg.php?%{QUERY_STRING} [F]

eg.2

通过[QSA]标志保留原有URL参数的同时,在后面增加新的URL参数:param=value

RewriteRule ^/page /page?param=value [QSA]

eg3.

当URL参数包含字符串parm时

将URL:http://jeecn.com/ask?param=value 重写为: http://jeecn.com/answer?param=value

RewriteCond %{QUERY_STRING} parm

RewriteRule ^/ask /answer

eg4.%n反向引用

1)当访问 /path 时,将字符串 parm修改为 showparm

RewriteCond %{QUERY_STRING} ^(.*)parm(.*)RewriteRule /path /path?%1showparm%2

上面的%1和%2是反向引用,来自之前的RewriteCond中正则表达式的匹配结果

2)将http://jeecn.com/path?key=value 转换为: http://piaoyun.cc/path/key/value

RewriteCond %{QUERY_STRING} ^(\w+)=(\w+)

RewriteRule ^/path /path/%1/%2?

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值