我的网站上有图片文件夹。
我有两个问题:
如何设置.htaccess
文件来执行此操作。此外,不是在images目录中放置一个新的.htaccess
,是否可以将这些指令合并到站点根目录中?
答案 0 :(得分:3)
您可以将这些规则添加到站点根目录中的htaccess文件中:
# check if the request is for the images folder
RewriteCond %{REQUEST_URI} ^/images/
# check that it isn't a request for an image
RewriteCond %{REQUEST_URI} !\.(jpe?g|png|gif|bmp)$ [NC]
# check that it isn't a request for the 2 ok php files
RewriteCond %{REQUEST_URI} !^/images/(gradient|rgba)\.php$
# forbid access
RewriteRule ^ - [L,F]
这应该使/images/
的任何请求不以jpg / jpeg / png / gif / bmp(或者你想要添加到正则表达式的任何其他扩展名)结尾,或者不是{ {1}}或gradient.php
会导致403被禁止。
编辑:
我不希望它们被禁止,我只是希望它们不被执行 - 它是一个上传文件夹,所以我基本上想要它,如果有人上传了一个我没有检测到的秘密PHP代码的JPG,那个它不会运行
只要将jpg和其他图像映射到正确的mime / type(通过rgba.php
),它就不会被传递给php处理程序,无论代码是什么都不会被执行。如果要使用默认处理程序提供所有文件,则需要在images目录的htaccess文件中设置AddType image/jpeg .jpg
。然后,您需要将渐变和rgba文件移动到其他目录。您无法从htaccess文件中有选择地设置处理程序,但您可以使用AddHandler default-handler php
块在vhost配置中设置处理程序。
编辑2:
我错了,您可以使用<Location>
标志使用规则设置自定义处理程序。因此,在上述规则中,您可以执行H
代替[L,F]
,以便任何非图像或[L,H=default-handler]
或gradient.php
的内容都会被发送到默认值 - 处理程序(例如,php文件将按原样发送,而不是由mod_php处理和执行)。
所以你可以这样做:
rgba.php