1

我有一个网站,里面有一个图片文件夹。

我有两个问题:

  1. 我想禁用该目录中的所有脚本执行(即没有 PHP/Perl/Python 任何东西。)
  2. 我的图像文件夹中有两个 php 文件,分别称为 gradient.php 和 rgba.php——我照常运行这些文件。

我如何设置我的.htaccess文件来做到这一点。.htaccess此外,是否可以将这些指令合并到站点根目录中,而不是在图像目录中放置一个新指令?

4

1 回答 1

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 (或您要添加到正则表达式的任何其他扩展名)或 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.phprgba.php被发送到默认处理程序的东西(例如 php 文件将按原样发送,而不是由 mod_php 处理和执行) .

所以你可以这样做:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/images/(gradient|rgba)\.php$
RewriteRule ^ - [L,H=default-handler]
于 2012-10-26T19:44:54.763 回答