【发布时间】:2012-05-13 11:30:53
【问题描述】:
我在修改 mod 时遇到了一点小麻烦。我的一个朋友正在编写一个允许您上传图片的脚本。
我们想要做的是允许用户将域名附加到直接图像链接,脚本将从提供的 URL 中检索图像。
例如,如果图像位于:http://www.test.com/image.jpg,添加 domain.com/http://www.test.com/image.jpg 将允许脚本检索该 url ( test.com) 来获取我们想要的图像。
编辑: HTTP 在 URL 前面,因为我不希望用户必须手动删除 HTTP。他们在浏览器中看到一张图片,在其前面附加“domain.com”、http 和 all,然后脚本检索该图片并将其存储在我们的服务器上。
我使用的规则是:
RewriteRule ^([\w|.|/]+(jpg|png|gif))$ /upload.php?url=http://$1 [B,L,NC,R=302]
这与 URL 正确匹配,但 http:// 中的冒号会导致问题。
如果用户输入:domain.com/www.test.com/image.jpg,它可以工作。
如果用户输入:domain.com/http://www.test.com/image.jpg,它不起作用,我得到一个 403 禁止页面(Windows 上的 XAMPP)。
如果用户输入:domain.com/http//www.test.com/image.jpg,它可以工作(http 中没有冒号)。
编辑:通过工作,我的意思是如果我在本地测试它,我可以看到我正确传递 $_GET['url'] 参数的 URL,而不是看到错误 403。
您能告诉我这条规则有什么问题以及如何解决吗?或者任何替代解决方案来实现我们想要的行为?
谢谢。
【问题讨论】:
-
为什么规则右侧还需要
http://?works是什么意思? -
我会编辑这个问题,让它变得更清楚。对不起!
-
在您的虚拟服务器的 apache 配置中,您应该能够设置一个 mod_rewrite 日志文件并告诉 apache 在访问 Web 服务 URL 时记录所有内容。我怀疑错误可能不在您认为的位置。您正在使用的 apache 版本的 Google RewriteLog 指令。
-
有趣。当我启用 mod_rewrite 日志记录并且冒号存在时,没有任何内容写入日志。我假设它没有被触发?当我删除冒号时,我会在日志中看到条目。
-
这听起来很可疑,好像正在发生一些有趣的事情。将 RewriteLogLevel 提升到 9,看看会发生什么。
标签: php mod-rewrite url-rewriting