Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Mod Rewrite并将URL作为参数传递_Php_Mod Rewrite_Url Rewriting - Fatal编程技术网

Php Mod Rewrite并将URL作为参数传递

Php Mod Rewrite并将URL作为参数传递,php,mod-rewrite,url-rewriting,Php,Mod Rewrite,Url Rewriting,我有一个小问题与修改重写。我的一个朋友正在写一个脚本,允许你上传图片 我们要做的是允许用户将域名附加到直接图像链接,脚本将从提供的URL检索图像 例如,如果图像位于:,则添加domain.com/http://www.test.com/image.jpg 将允许脚本检索该url(test.com)以获取我们想要的图像 编辑:HTTP位于URL前面,因为我不希望用户必须手动删除HTTP。他们在浏览器中看到一个图像,在其前面附加“domain.com”、http和all,脚本检索该图像并将其存储在我

我有一个小问题与修改重写。我的一个朋友正在写一个脚本,允许你上传图片

我们要做的是允许用户将域名附加到直接图像链接,脚本将从提供的URL检索图像

例如,如果图像位于:,则添加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中没有冒号)

EDIT:通过工作,我的意思是如果我在本地测试它,我可以正确地看到传入$\u get['URL']参数的URL,而不是看到错误403

你能告诉我这条规则出了什么问题以及如何解决它吗?或者有什么替代方案来实现我们想要的行为


谢谢。

您可以在php中使用urlencode()

问题在于您的正则表达式

尝试:


这种方法繁琐、容易出错且不安全(例如,图像URL不需要以那些众所周知的文件扩展名结尾)

如果我理解您的用例,它从用户在网上冲浪和查看图像时开始,他希望通过您的服务共享图像。然后他用手打字
http://your.sharing.service
在浏览器的地址栏中,在任何文本之前。然后使用
mod_rewrite
触发脚本,但我认为您的正则表达式(以及您的服务)将以多种不可预测的方式失败


我从未使用过这样的服务,我认为使用按钮将URL提交到某个脚本(比如
http://my.service.com/upload?url=...
)应该是首选。

嗯,我想我已经发现了问题所在。这不是正则表达式,也不是mod_重写本身

因此,这是Apache在Windows上的一个bug,已声明为WONTFIX

有关参考,请参阅和


我张贴我所发现的,并会考虑这个问题的答案。谢谢大家!

为什么规则的右侧甚至需要
http://
?那么
工作
意味着什么呢?我会编辑这个问题,让它变得更清晰。很抱歉在虚拟服务器的apache配置中,您应该能够设置mod_rewrite日志文件,并在访问web服务URL时告诉apache记录所有内容。我怀疑错误可能不在你认为的地方。您正在使用的apache版本的Google RewriteLog指令。有趣。当我启用mod_rewrite日志并且冒号在那里时,没有任何内容写入日志。我假设它没有被触发?当我删除冒号时,我会在日志中看到条目。这听起来很可疑,好像发生了什么有趣的事情。将日志级别提升到9,看看会发生什么。仍然是一样的。我得到一个403禁止的错误。“您没有访问请求对象的权限。该对象受读取保护或服务器不可读。”@Inf.S try:
/upload.php?url=$1
规则是:RewriteRule^((http | https)+[\:\/\/\w\.]+(jpg | png | gif))$/upload.php?url=$1[B,L,NC,R=302]仍然是403。如果我删除:.@Inf.S OK(我在黑暗中拍摄):请尝试:
[R=302]
。为了测试的缘故,甚至只是删除所有标志。请查看我在关于日志记录的主要问题中的评论。如果冒号在那里,mod rewrite好像不会触发。这就是我想要做的。灵感实际上来自reddit。如果你遇到一个你想分享的页面,你只需在页面的URL前面加上“reddit.com/”,它就会把你带到一个允许你分享页面的页面。我想做一些类似的事情,只是为了图像。至于扩展,它只是用于测试目的。我们只接受简单的图像,没有什么太复杂的。是的,但是有一个比使用正则表达式更好的方法。例如,将各种URL重定向到您的脚本,让它在本地下载资源并执行一些虚拟函数,以判断它是否是有效的图像文件您是指某种控制器脚本?但是,如果一旦URL中有冒号需要重定向,重定向就会中断,那么如何将各种URL重定向到它。这不是一个问题吗?有没有一种不用mod rewrite重定向URL的方法?顺便说一句,Reddit是用于网页的。通常,站点不会将原始图像二进制数据输出到浏览器,而是使用html文档进行响应。我不认为在浏览器栏中有图像URL是很常见的(我想到的唯一情况是4chan),我们希望用户在直接链接到图像之前附加我们的域,例如URL直接以图像扩展结尾。URL本身将转到一个脚本,该脚本将检查链接是否确实是一个图像。没问题。首先,冒号的事情必须要起作用!
^((http|https)+[\:\/\/\w\.]+(jpg|png|gif))$