`
flex_莫冲
  • 浏览: 1075441 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

将URL的某个参数值的改成另一个参数

 
阅读更多
来自:http://www.meedee.cn/2016/06/21/%e5%b0%86url%e5%8f%82%e6%95%b0%e8%bd%ac%e6%8d%a2%e4%b8%ba%e5%8f%a6%e4%b8%80%e4%b8%aa%e5%8f%82%e6%95%b0%e5%81%9a301%e8%b7%b3%e8%bd%ac%e7%9a%84%e5%ae%9e%e7%8e%b0/

将URL的某个参数值的改成另一个参数。

例如

http://xxx/Finance/lists?iid=202&sid=26 要改成 http://xxx/Finance/lists?iid=202&sid=31

先考虑用Thinkphp的路由规则,发现不能实现。因为只是匹配$_SERVER['PATH_INFO']的数据,不能获取查询参数。见http://php.net/manual/zh/reserved.variables.server.php
'PATH_INFO'
包含由客户端提供的、跟在真实脚本名称之后并且在查询语句(query string)之前的路径信息,如果存在的话。例如,如果当前脚本是通过 URL http://www.example.com/php/path_info.php/some/stuff?foo=bar 被访问,那么 $_SERVER['PATH_INFO'] 将包含 /some/stuff。

如果非要实现,就要改TP的这个方法啦。

public function run(&$return){
// 优先检测是否存在PATH_INFO
$regx = trim($_SERVER['PATH_INFO'],'/');
if(empty($regx)) return $return = true;
// 是否开启路由使用
if(!C('URL_ROUTER_ON')) return $return = false;
// 路由定义文件优先于config中的配置定义
$routes = C('URL_ROUTE_RULES');
// 路由处理
if(!empty($routes)) {
$depr = C('URL_PATHINFO_DEPR');
// 分隔符替换 确保路由定义使用统一的分隔符
$regx = str_replace($depr,'/',$regx);
foreach ($routes as $rule=>$route){
if(0===strpos($rule,'/') && preg_match($rule,$regx,$matches)) { // 正则路由
return $return = $this->parseRegex($matches,$route,$regx);
}else{ // 规则路由
$len1   =   substr_count($regx,'/');
$len2   =   substr_count($rule,'/');
if($len1>=$len2) {
if('$' == substr($rule,-1,1)) {// 完整匹配
if($len1 != $len2) {
continue;
}else{
$rule =  substr($rule,0,-1);
}
}
$match  =  $this->checkUrlMatch($regx,$rule);
if($match)  return $return = $this->parseRule($rule,$route,$regx);
}
}
}
}
$return = false;
}
那就通过htaccess来实现吧

参考:https://wiki.apache.org/httpd/RewriteQueryString

用Modifying the Query String来改下。
最终的这样子

RewriteBase /
RewriteCond %{QUERY_STRING} (.*(?:^|&))sid=26|27((?:&|$).*) 
RewriteRule ^Finance/lists /Finance/lists?%1sid=31 [L,R=301]
分享到:
评论

相关推荐

    超级有影响力霸气的Java面试题大全文档

    例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。 当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望...

    java 面试题 总结

    例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。 当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望...

    杰奇1.4 破解版+注册机

    这是针对上面的用户组来区分权限的,系统和每个模块都有一个权限设置栏目,您可以选择每个用户组是否有某个具体的权限。 5、区块管理 区块在网页总表现出来的就是一个方块栏目,象最新文章,点击排行之类。区块...

    杰奇1.4 破解版

    这是针对上面的用户组来区分权限的,系统和每个模块都有一个权限设置栏目,您可以选择每个用户组是否有某个具体的权限。 5、区块管理 区块在网页总表现出来的就是一个方块栏目,象最新文章,点击排行之类。区块...

    ZXV10 H608B 破解

     2、在U盘中建立一个文件夹:e8_Config_Backup 把“中兴H608B修改软件包”中的ctce8_H608B.cfg放入该文件夹,然后将U盘插入设备USB口,连接上网线(不是电话线),重新开关电源重启设备,等待2分钟左右。...

    杰奇1.3标准版

    4、权限设置 这是针对上面的用户组来区分权限的,系统和每个模块都有一个权限设置栏目,您可以选择每个用户组是否有某个具体的权限。 5、区块管理 区块在网页总表现出来的就是一个方块...

    利用phantomjs将web页面转Pdf

    windows版: 1、下载phantomjs,解压到某个目录。 2、将XXX\phantomjs\bin配置到环境变量中...ps:如果页面有滚动条显示不全,可以调整pdf\pdf.js 的分辨率或其他参数,使其适应,根据具体情况自行调整或改成自适应。

    WP主题:HotNewspro 2.72

    主题中有一个模板文件名称为:category-414.php,将后面的数字414改成某个分类的ID,再打开这个分类就会以通栏的样式显示该分类。 ■ 增强文章编辑功能 后台文章编辑时,实现所见即可所得,与前台浏览排版样式相同...

    Java-PHP-C#

    "a.[0-9]": 一个a跟一个字符再跟一个数字的 (含有这样一个字符串的字符串将被匹配,以后省略此括号) "^.{3}$": 以三个字符结尾 . 中括号括住的内容只匹配一个 单一的字符 "[ab]": 匹配单个的 a 或者 b ( 和...

    测试培训教材

    一个好的测试管理工具应该能把以上几个阶段都管理起来。 测试人员每时每刻都在度量别人的工作成果,而测试人员的工作成果又由谁来度量呢?度量的标准和依据是什么呢?软件测试的度量是测试管理必须仔细思考的问题。...

    springmybatis

    请注意,这里面有一个方法名 selectUserByID 必须与 User.xml 里面配置的 select 的id 对应() 重写测试代码 程序代码 程序代码 public static void main(String[] args) { SqlSession session = ...

    奥瑞文网络培训系统(免费版2.2.7)

    将没填考试时长的试卷改成不限时 •15.修正部分媒体文件名无法播放问题 •16.修正基础数据(去掉旧版本演示数据) •17.修正课件图片媒体缩略图宽度的问题 •18.修正ADMIN_URL后台翻页无法调用的问题 •19.修正一些...

    奥瑞文在线培训系统服务器安装包v2.2.9

    拥有至少14种题型、3种组卷模式、32项考试发布参数、10多种统计方式、支持3种流行的课件格式、支持在线问答、68个功能模块。兼容IE6、IE7、IE8、IE9、360、FireFox、Chrome、Opera等所有浏览器。 产品应用: 奥瑞文...

Global site tag (gtag.js) - Google Analytics