Apache mod_rewrite将双斜杠转换为单斜杠

3

我有一个像这样的URL:

http://example.com/img.php?url=http://example2.com/path/to/image/name.jpg

我是通过这个问题的帮助Apache mod_rewrite复杂URL正则表达式创建了一个规则。

RewriteRule  ^img.php\/(.+?(?:\.jpg|\.png))$  img.php?url=$1

但是当我在htaccess文件中使用这个规则,并使用相同的URL时:
http://example.com/img.php/http://example2.com/path/to/image/name.jpg

我的参数中http:后面的双斜杠被转换成了一个斜杠!因此,我的php中的第一个参数变成了:

http:/example2.com/path/to/image/name.jpg

can you help me please?

1个回答

3

Apache在RewriteRule中将多个/替换为单个/。应使用RewriteCond代替:

RewriteCond %{REQUEST_URI} ^/img\.php/(.+?\.(?:jpe?g|png))$ [NC]
RewriteRule ^ img.php?url=%1 [L,QSA]

1
谢谢@anubhava,但是当我使用这个规则时,PHP中的URL参数为空!为什么? - Hamid Zamani
啊,抱歉我的错误。应该是%1而不是$1。现在请尝试更新的代码。 - anubhava
1
非常感谢,你的代码运行得非常好 :) - Hamid Zamani
它在Apache 2.4.52上不起作用,斜杠也被RewriteCond剥离了...除非为虚拟主机设置MergeSlashes Off。 - user1768761

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接