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?
php 正则替换url参数,url Rewrite 重写时带“?”(问号)参数的传递相关推荐
- django-反转路径时带上参数-适用于路径中通过命名分组的形式来捕捉参数的情景
路径中有参数的时候 article_id 就是路径里的参数 问题 如何通过别名来反转得到路径呢 注,路径中有一个动态的参数哦 路径反转带上参数(关键词方式) reverse(别名,kwargs={形参 ...
- 拦截地址栏参数_selenium操作chrome时的配置参数
参数说明: about:version - 显示当前版本 about:memory - 显示本机浏览器内存使用状况 about:plugins - 显示已安装插件 about:histograms - ...
- curl发送post请求带Json参数、发送get请求
文章目录 curl发送post请求带Json参数 curl发送get请求带参数 curl 参数 curl发送post请求带Json参数 1:linux下执行curl命令发送post请求 curl -X ...
- 织梦系统基本参数php,织梦后台系统基本参数新增的变量数据库修改
织梦后台系统设置---系统基本参数里面除了系统自带的参数之外,很多站长为了效果也增加了不少自定义的变量,但是如果有的变量不需要,或者是更换模板变量功能没起到作用,就需要修改自定义变量. 修改自定义变量 ...
- range函数python三个参数_range()函数三种参数的用法
第8篇分享 range()是python的内置函数,用的地方挺多的,目前我经常会在for循环中作为循环的次数来使用,其实range()的用法不仅仅如此,本文给大家介绍下range()函数的三种参数的基 ...
- urlencode quote unquote (url 中带中文参数)
目录: urlencode & quote & unquote (url 中带中文参数) python httplib urllib urllib2区别(一撇) 当url地址含有中文或 ...
- 使用jquery获取url及url参数的方法
[开发笔记]-使用jquery获取url及url参数的方法 使用jquery获取url以及使用jquery获取url参数是我们经常要用到的操作 1.jquery获取url很简单,代码如下: windo ...
- nginx配置url中带问号的rewrite跳转
今天收到一个需求,要将一个带查询参数的url跳转到另外一个静态url,安装常规的rewrite规则,如: rewrite ^/a.html?id=67$ http://zt.epython.cn/20 ...
- 使用jquery获取url及url参数的方法及定义JQuery扩展方法
1.jquery获取url很简单,代码如下: window.location.href; 其实只是用到了javascript的基础的window对象,并没有用jquery的知识. 2.jquery获取 ...
最新文章
- python爬取本地天气信息_用Python写一个爬取中国天气网的终端版天气预报爬虫
- 谈判专家(东方化改题+懒得看标程)
- Android使用Retrofit2.0和RxJava2.0处理网络请求
- ftl转PDF服务器上中文不显示,解决Linux中swftools转换中文pdf时出现乱码问题
- 谷歌开源语音识别AI技术,可以从人群中区分每个人的发言
- HTML a 标签的伪类
- 苹果Mac微软office办公套件:Microsoft 365
- QtextEdit自定义右键菜单
- Acronisnbsp;Truenbsp;Image进行…
- DataHunter完成千万级A轮融资 打造数据协作平台
- 免费录屏软件有哪些?录屏软件下载,认准这3款软件
- 邮箱邮件收发件服务器怎么设置?
- 模拟测静电场实验报告
- python之tkinter Pack使用
- 关于Unity 5.x Lightmap Shader 编译过慢的分析
- 或用新政策按揭和省钱
- JavaScript实现拖动滑块验证(方法已封装)
- n3k配置vpc是否还需要配置hsrp_HSRP协议详解:配置HSRP实现网关的冗余备
- c语言的jmp_buf函数
- Java工作笔记/Java面试题/Java八股文/Java常用API