htaccess将所有图像重定向到处理程序

时间:2016-01-27 13:54:13

标签: php .htaccess redirect

我想要做的是将所有图片(jpeg,png,gifs?)重定向到index.php?q =文件,该处理程序将使用<img src=file>标记。
但我担心从该标签调用文件时会产生无限循环 所以基本上我要问的是如何仅将外部呼叫重定向到图像 (或者有更好的方法来保护我的图像吗?)

2 个答案:

答案 0 :(得分:2)

<强> That rule creates a handler which takes all matching requests to imageHandler.php

请你试试下面的规则;

RewriteRule ^(.*)(.jpg|.jpeg|.png|.gif|.bmp|.etc)$ imageHandler.php?f=%{REQUEST_FILENAME} [QSA,L]

您将获得 $_GET["f"] 作为请求的文件名, $_GET["f"] 代表服务器上文件的路径。

PS:这个规则不会导致你的请求无限循环,只有imageHandler.php会执行一些进程,你可以决定是否返回文件。请注意,您必须为imageHandler.php实现二进制输出,这可能会导致您的操作成本。要降低该操作的成本,您可能必须为imageHandler.php实现客户端缓存或服务器缓存机制。

<强> That rule creates a redirect handler which redirects all matching requests to index.php

RewriteCond %{HTTP_REFERER} ^$ #That means referer is empty which means direct access to file
RewriteCond %{HTTP_REFERER} !^http://www\.example\.com.* #That means referer is not my domain because when you use a file in <img> tag that will create a request to that image with referer of embedding address
RewriteCond %{REQUEST_URI} !^index.php  #That means request not targeted to index.php (which a part of endless loop)
RewriteCond %{REQUEST_FILENAME} -f #That means request targeted to a file
RewriteCond %{REQUEST_URI} (.jpg|.jpeg|.png|.gif|.bmp)$  #That means request ends with .ext
RewriteRule ^(.*)(.jpg|.jpeg|.png|.gif|.bmp|.etc)$ http://example.com/index.php?f=$1 [R=302,L,QSA] #That means redirect request to index.php?f=file

我没有机会测试第二个,因为我没有Linux环境但是生产并且无法在生产环境中测试它。

希望这些信息可以帮助您了解您的情况。

答案 1 :(得分:2)

您可以使用:

RedirectMatch ^/(.+\.(jpg|png|gif))$ /index.php?f=$1

这会将以.jpg,png或gif结尾的任何请求重定向到/index.php。

请注意,这是一个外部重定向,如果要在内部将这些请求重定向到index.php,可以使用@cihanUygun提供的rewriteRule。