使用url重写后,base64编码给我带来了奇怪的结果

时间:2011-08-30 07:30:22

标签: php mod-rewrite base64

我有一个非常奇怪的问题

好的,问题就是这样

假设我有这个网址

http://www.example.com/?file=WFS010C.part3.rar&url=http://www.fileserve.com/file/vEpByp3/WFS010C.part3.rar

如果我base64_encode($_GET['url'])

结果就是这个

aHR0cDovL3d3dy5maWxlc2VydmUuY29tL2ZpbGUvdkVwQnlwMy9XRlMwMTBDLnBhcnQzLnJhcg ==

应用此重写条件后

RewriteEngine On
RewriteBase /
RewriteRule ^file-(.*)-(.*)\.html$ index.php?file=$1&url=$2

网址就像这样

http://www.example.com/file-WFS010C.part3.rar-http://www.fileserve.com/file/vEpByp3/WFS010C.part3.rar.html

现在如果我做base64_encode($_GET['url'])

结果就是这个

aHR0cDovd3d3LmZpbGVzZXJ2ZS5jb20vZmlsZS92RXBCeXAzL1dGUzAxMEMucGFydDMucmFy

**请注意,如果没有编码打印,$ _GET ['url']的值在两种情况下完全相同!

在使用重写后,如何使用相同的字符串给出不同的结果?**

有谁知道这个问题是什么

3 个答案:

答案 0 :(得分:1)

您正在重写URl,因此第二个-之后的部分存储在url参数中。因此,在第二种情况下,您会收到url = http://www.fileserve.com/file/vEpByp3/WFS010C.part3.rar.html。就像你以前一样。

您编码的内容标有粗体:

使用第一个网址

http://www.example.com/?file=WFS010C.part3.rar&url= http://www.fileserve.com/file/vEpByp3/WFS010C.part3.rar

使用第二个URL,您将其重写为

http://www.example.com/index.php?file=WFS010C.part3.rar&url= http://www.fileserve.com/file/vEpByp3/WFS010C.part3.rar

更新您的第二个base64_encoded网址正在解码为http:/www.fileserve.com/file/vEpByp3/WFS010C.part3.rar。请注意http之后的单/。您确定第二个网址中没有拼写错误吗?

答案 1 :(得分:1)

您可以使用base64_decode查看它们是否相同。

事实上:

第一个是 的 http://www.fileserve.com/file/vEpByp3/WFS010C.part3.rar

第二个是 的 HTTP:/www.fileserve.com/file/vEpByp3/WFS010C.part3.rar

你可以看到,它们并不相同。

答案 2 :(得分:0)

首先,您需要对“url”参数进​​行urlencode。我猜测参数由于其中的“/”之类的无效字符而无法正确解析。