我有一个网站,里面有一个图片文件夹。
我有两个问题:
- 我想禁用该目录中的所有脚本执行(即没有 PHP/Perl/Python 任何东西。)
- 我的图像文件夹中有两个 php 文件,分别称为 gradient.php 和 rgba.php——我照常运行这些文件。
我如何设置我的.htaccess
文件来做到这一点。.htaccess
此外,是否可以将这些指令合并到站点根目录中,而不是在图像目录中放置一个新指令?
您可以将这些规则添加到站点根目录中的 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 (或您要添加到正则表达式的任何其他扩展名)或 notgradient.php
或结尾rgba.php
,将导致 403 被禁止。
编辑:
我不希望它们被禁止,我只是希望它们不执行——它是一个上传文件夹,所以我基本上希望如果有人上传一个我没有检测到的秘密 PHP 代码的 JPG,它不会不跑
只要将 jpg 和其他图像映射到正确的 mime/类型(通过AddType image/jpeg .jpg
),它就不会被交给 php 处理程序,并且那里的任何代码都不会被执行。如果要使用默认处理程序提供所有文件,则需要AddHandler default-handler php
在 images 目录中的 htaccess 文件中进行设置。然后,您需要将渐变和 rgba 文件移到其他目录。您不能有选择地从 htaccess 文件中设置处理程序,尽管您可以使用<Location>
块在您的 vhost 配置中设置处理程序。
编辑2:
我错了,您可以使用该H
标志使用规则设置自定义处理程序。所以在上面的规则中[L,F]
,你可以这样做,而不是[L,H=default-handler]
任何不是图像或gradient.php
将rgba.php
被发送到默认处理程序的东西(例如 php 文件将按原样发送,而不是由 mod_php 处理和执行) .
所以你可以这样做:
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/images/(gradient|rgba)\.php$
RewriteRule ^ - [L,H=default-handler]