禁用 php,但允许在子目录中

禁用 php,但允许在子目录中

我想为所有用户目录禁用 php,我通过添加php_admin_value engine Off以下内容来实现:

/etc/apache2/sites-available/default

<IfModule mod_userdir.c>
    UserDir "public_html"
    <Directory /home/*/public_html>
        php_admin_value engine Off
    </Directory>
</IfModule>

但我希望一个用户(我自己)能够执行 php,但只能在一个子目录中执行。我尝试遵循https://wiki.ubuntu.com/UserDirectoryPHP,它指定创建一个包含以下几行的新文件(我认为是否分开并不重要conf.d,但我认为这样更干净,所以我遵守了):

/etc/apache2/d.conf/php-in-homedirs.conf

<VirtualHost *:80>
    <IfModule mod_userdir.c>
        <Directory /home/gunther/public_html/php>
            php_admin_value engine on
        </Directory>
    </IfModule>
</VirtualHost>

这些说明添加到 apache 配置中,正如我在服务器信息中看到的:

Module Name: mod_php5.c
Content handlers: yes
...
Current Configuration:

<VirtualHost *:80>
  11:   <Directory /home/*/public_html>
  12:     php_admin_value engine Off
    :   </Directory>
    : </VirtualHost>
In file: /etc/apache2/conf.d/php-in-homedirs.conf
   2: <Directory /home/gunther/public_html/php/*>
   3:   php_admin_value engine On
    : </Directory>

但它就是不工作,它下载了 php 文件。如果我php_admin_value engine off从 vhost 中删除default,php 可以工作,但它对所有目录中的所有用户都有效。我只希望它能为那个子目录工作。

答案1

描述了 Apache 用于合并不同部分中的指令的优先顺序这里。这可能很难做到正确,这似乎是一个优先顺序不明确且不是您想要或期望的情况。

在这种情况下,您可以通过将您的<Directory>部分更改为具有更高优先级的部分来强制所需的优先级,例如:

<DirectoryMatch ^/home/gunther/public_html/php/> ... </DirectoryMatch>

或者

<Location /~gunther/php> ... </Location>

答案2

据我了解,它是php_admin_value engineapache 配置文件的使用方式和优先级的组合。

如果我把 dis/enable 放在一起使用engine 1而不是engine on,它有效,所有其他组合都有效不是工作。如果有人有解释,请告诉我!

我最终将 userdirs 的 php 启用/禁用功能放入了php5.conf文件中:

<IfModule mod_userdir.c>
    <Directory /home/*/public_html>
        php_admin_value engine Off
    </Directory>
    <Directory /home/gunther/public_html/php>
        php_admin_value engine 1
    </Directory>
</IfModule>

sites-enabled默认情况下,它在和之前加载conf.d

相关内容