现代重写,并传递一个URL作为参数(Mod Rewrite and passing a URL as

2019-09-17 00:22发布

我有一个小的麻烦与国防部重写。 我的一个朋友正在写一个脚本,使您可以上传图片。

我们想要做的是让用户域名追加到直接图像链接,该脚本将检索从所提供的URL的形象。

例如,如果图像是: http://www.test.com/image.jpg ,加入domain.com /http://www.test.com/image.jpg将允许脚本来检索该网址( test.com),以得到我们想要的图像。

编辑:HTTP是在URL的前面,因为我不希望用户必须手动删除HTTP。 他们看到的图像在他们的浏览器,他们才追加“domain.com”,http和所有和脚本检索图像并将其存储在我们的服务器上。

我使用的规则是:

RewriteRule ^([\w|.|/]+(jpg|png|gif))$ /upload.php?url=http://$1 [B,L,NC,R=302]

这种匹配正确的网址,但在HTTP冒号://导致的问题。

如果用户输入:domain.com/www.test.com/image.jpg,它的工作原理。

如果用户输入:domain.com/http://www.test.com/image.jpg,它不工作,我得到一个403页的禁止(XAMPP在Windows上)。

如果用户输入:domain.com/http//www.test.com/image.jpg,它的工作原理(在HTTP没有冒号)。

编辑:通过工作,我的意思是,如果我在本地测试了一下,我能看到的,而不是看到一个403错误我在$ _GET [“网址”]参数传递正确的URL。

你能告诉我什么是错的这条规则,以及如何解决它? 或任何其他解决方案,以实现我们想要的行为?

谢谢。

Answer 1:

嗯,我想我已经找到了问题。 这不是正则表达式,也没有mod_rewrite的本身。

因此,它已被宣布WONTFIX在Windows Apache中的错误。

仅供参考,请参阅本StackOverflow的线程:和这个bug报告

我张贴我发现了什么,并会考虑这个问题的回答。 谢谢你们!



Answer 2:

你可以在PHP中使用进行urlencode()



Answer 3:

这种方法是麻烦的,容易出错和不安全(例如,不需要的图像的URL与那些公知的文件扩展名来结束)

如果我理解您的使用情况下,当用户在网上冲浪时,他在观看的图像开始,他希望通过自己的服务来分享。 然后,他通过各类手工http://your.sharing.service在浏览器的地址栏,只是任何文本之前。 然后你使用mod_rewrite触发你的脚本,但我觉得你的正则表达式(和你的服务太)将在许多不可预知的方式失败。

我从来没有使用过这样的服务,我觉得用一个按钮URL提交一些脚本的标准方法(假设http://my.service.com/upload?url=... )应该是首选。



Answer 4:

问题是在你的正则表达式...

尝试:

^((http|https)+[\:\/\/\w\.]+(jpg|png|gif))$


文章来源: Mod Rewrite and passing a URL as parameter