.htaccess将图像文件重写为php脚本->;显示断开的图像链接

.htaccess将图像文件重写为php脚本->;显示断开的图像链接,php,apache,.htaccess,mod-rewrite,Php,Apache,.htaccess,Mod Rewrite,这是我现在所拥有的 .htaccess /getAccess.php 它显示我没有403通道,这很好。但我的问题是当我试图达到: http://www.example.com/10.jpg http://www.example.com/getAccess.php?image=10 我试图通过PHP文件加载图像,但它显示了一个断开的图像链接 这不会将图像重写为PHP脚本(正如标题所示),它只是阻止访问(您正在看到的403)。然而,这并没有像你所说的那样阻止“直接访问”吗?所谓“直接访问”,我们

这是我现在所拥有的

.htaccess /getAccess.php 它显示我没有403通道,这很好。但我的问题是当我试图达到:

http://www.example.com/10.jpg
http://www.example.com/getAccess.php?image=10
我试图通过PHP文件加载图像,但它显示了一个断开的图像链接

这不会将图像重写为PHP脚本(正如标题所示),它只是阻止访问(您正在看到的403)。然而,这并没有像你所说的那样阻止“直接访问”吗?所谓“直接访问”,我们指的是直接在浏览器地址栏中键入URL,此时HTTP引用器为空,并且您的指令未被处理(第一个条件排除)。它将阻止来自外部站点的直接链接(前提是传递了HTTP Referer),但基于HTTP Referer的访问控制充其量是不可靠的

要解决眼前的问题,您可以尝试从上述模式的末尾删除
$
。因为这将阻止所有不是单个字符(即所有字符)的内部引用


要阻止对图像文件的访问,请将
RewriteRule
指令更改为:

RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F]
这实际上与您发布的内容相同。在您的指令中,
/getAccess.php?image=$1
部分(即替换)被忽略-这就是
F
标志的作用。在这种情况下,应该只使用连字符进行替换

另一方面,要将对图像文件的请求重写为
/getAccess.php
脚本,您需要执行以下操作(尽管这自然会与上面“禁止”此类请求的指令相冲突):


在您最初的指令中,
$1
只是对文件扩展名(即“jpg”、“jpeg”、“png”等)的反向引用,这似乎不是您的意图。

是的,文件存在。。在.htaccess一切正常工作之前,我认为.htaccess文件是我的问题。我正在尝试阻止对图像文件的直接访问。并尝试仅通过php文件显示图像我没有HTML文件,我只想通过php文件获取图像,制作一个iOS应用程序下载图像。是的,php生成一个HTML文件,但getAccess.php是唯一需要工作的文件。我应该怎么做才能通过php文件访问图像,并阻止其他直接访问?
http://www.example.com/getAccess.php?image=10
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?example.com/.$ [NC]
RewriteRule \.(jpg|jpeg|png|gif)$  /getAccess.php?image=$1 [NC,F,L]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?example.com/.$ [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F]
RewriteRule (.+)\.(?:jpe?g|png|gif)$  /getAccess.php?image=$1 [NC,L]