Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache 使用.htaccess将两个文件列入白名单以供执行_Apache_.htaccess - Fatal编程技术网

Apache 使用.htaccess将两个文件列入白名单以供执行

Apache 使用.htaccess将两个文件列入白名单以供执行,apache,.htaccess,Apache,.htaccess,我有一个网站,有一个文件夹的图像 我有两个问题: 我想禁用该目录中的所有脚本执行(即没有PHP/Perl/Python) 什么都可以。) 在我的images文件夹中有两个php文件,名为gradient.php和rgba.php–我按照通常的方式运行这些文件 如何设置我的.htaccess文件来执行此操作。此外,不必在images目录中放置新的.htaccess,是否可以将这些指令合并到站点根目录中的指令中?您可以将这些规则添加到站点根目录中的htaccess文件中: # check if th

我有一个网站,有一个文件夹的图像

我有两个问题:

  • 我想禁用该目录中的所有脚本执行(即没有PHP/Perl/Python) 什么都可以。)
  • 在我的images文件夹中有两个php文件,名为gradient.php和rgba.php–我按照通常的方式运行这些文件

  • 如何设置我的
    .htaccess
    文件来执行此操作。此外,不必在images目录中放置新的
    .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(或您想添加到正则表达式中的任何其他扩展名)结尾,或者不是
    gradient.php
    rgba.php
    ,都将导致403禁止


    编辑:


    我不希望他们被禁止,我只希望他们不要执行——这是一个上传文件夹,所以我基本上希望如果有人上传了一个JPG,而这个JPG是我没有检测到的PHP代码,它就不会运行

    只要jpg和其他图像映射到正确的mime/类型(通过
    AddType image/jpeg.jpg
    ),它就不会被交给php处理程序,也不会执行任何代码。如果希望使用默认处理程序为所有文件提供服务,则需要在images目录的htaccess文件中设置
    AddHandler default handler php
    。然后需要将渐变和rgba文件移出到其他目录。虽然可以使用
    块在vhost配置中设置处理程序,但不能从htaccess文件中选择性地设置处理程序


    编辑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]
    

    我不希望他们被禁止,我只希望他们不要执行——这是一个上传文件夹,所以我基本上希望如果有人上传了一个JPG,而这个JPG是我没有检测到的PHP代码,它将不会运行。如何允许PHP文件上传,但不执行它们?