开启urlrewrite后,不能将网址用作参数传递?

#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

我在本地测试了下 貌似转义以后就认不出来了
20111013145628.jpg

测试环境

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 暗夜星辰

个人觉得把分隔符换成 / 比较好
20111013150711.jpg

在分隔符为 - 的情况下 依旧有问题 继续研究

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