.htaccess URL重写跳过其他/

时间:2012-12-15 18:55:58

标签: regex .htaccess expression

我的.htaccess文件中有以下代码

RewriteEngine on
RewriteRule ^thumbnail/(.*).png thumbnail.php?url=$1 [NC]

它的作用是转向

http://mydomain.com/thumbnail.php?url=http%3A%2F%2Fwww.example.com%2F

http://www.mydomain.com/thumbnail/http%3A%2F%2Fwww.example.com%2F.png

但当我echo url文件中的thumbnail.php变量时,它会返回

http:/www.example.com/不是http://www.example.com/

其他/去了哪里?

1 个答案:

答案 0 :(得分:3)

因为http://www.example.com/是URI路径的一部分(而不是查询字符串的一部分),所以apache会自动规范化路径,从而删除多个连续的斜杠。例如,如果您尝试转到:

http://www.mydomain.com/thumbnail/foo//////////////bar.png

然后打印出url的值,你得到foo/bar.png因为在URI甚至到达处理管道中的mod_rewrite之前,会清除额外的斜杠。

或者,您可以删除http://部分并在重写中添加:

RewriteEngine on
RewriteRule ^thumbnail/(.*).png thumbnail.php?url=http://$1 [NC]

然后你的网址就是:

http://www.mydomain.com/thumbnail/www.example.com%2F.png

当您打印出url的值时,您会得到http://www.example.com/.png