开启urlrewrite后,不能将网址用作参数传递?
发布于:2022-01-17 09:50:54
#1 coolhpy
原始URL:
/index.php?c=main&a=login&url=%2Findex.php%3Fc%3Dmain%26a%3Dindex
开启urlrewrite后的URL(无结尾符):
/main-login-url-%2Fmain-index
出现的情况:访问rewrite后的地址,提示找不到文件,,而去掉url的值后(即:/main-login-url-)就可以正常访问,应该如何解决?
测试环境:
Windows XP SP3
XAMPP 1.7.4
Firefox 7.0.1
SpeedPHP 3.1.89.1
2011-10-13 14:16:23
#2 暗夜星辰
回复 1 coolhpy 我在本地测试了下 貌似转义以后就认不出来了
测试环境 SpeedAMP + win7
2011-10-13 15:00:48
#3 暗夜星辰
我又去测试了下代码
百度搜索页面传参生成的是 %
3Findex.php%3Fc%3Dmain%26a%3Dindex
而默认的URL编码生成的是 %
2Findex.php%3Fc%3Dmain%26a%3Dindex
我发现使用%3就没问题 %2就出错 估计是为了安全编码而自定义转义了
你先把 ? & 等字符安全转义一下试试看
2011-10-13 15:13:42
#4 暗夜星辰
个人觉得把分隔符换成 / 比较好

在分隔符为 - 的情况下 依旧有问题 继续研究
2011-10-13 15:17:57
#5 jake
楼上正解,用斜杠或者_吧,-不一定能使用全部的情况。
楼主的网址也是有些复杂,做了两次spUrl + 两次 urlencode。。。
2011-10-13 16:10:16
#6 coolhpy
谢谢暗夜星辰 和 jake,不过就算改成斜杠也不行
我想实现的功能是:
当我访问到页面A,并点击其中的B页面的链接时,将页面A的网址做为参数传递给B页面,在完成相应操作后,返回所传递过来的A页面的地址。
上面所列出来的地址就是A页面中链接的地址。。其中的A页面地址是通过 urlencode($_SERVER['REQUEST_URI']) 获取的。
A页面的地址本身是经过rewrite的,自然不包含? & 之类的特殊符号,,但是 / 不可避免
2011-10-13 16:51:52
#7 jake
其实很简单,不要往深里面想,这种实现在PHP里面很常见。
在SP里面实现那就更简单了
要这样做:echo spUrl('main', 'index').'?url='.urlencode($_SERVER['REQUEST_URI']);
不能这样做:
echo spUrl('main', 'index', array('url'=>urlencode($_SERVER['REQUEST_URI'])));把当前的地址用?的方式传到下一个地址,生成的地址类似:
/main-index.html?url=%2Fmain-index
为什么要用?url=urlencode后的地址呢?因为这样才能更好地传递encode后的地址。
重复一下,因为你的传递地址,这是传递地址的标准做法:要:echo spUrl('main', 'index').'?url='.urlencode($_SERVER['REQUEST_URI']);
不要:echo spUrl('main', 'index', array('url'=>urlencode($_SERVER['REQUEST_URI'])));
2011-10-13 18:53:16
#8 暗夜星辰
学习了~
2011-10-13 21:54:43
#9 coolhpy
回复 7 jake 哈哈,原来就这样,,我想复杂了~~:lol :victory:
2011-10-13 23:58:15