我想为所有用户目录禁用 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 engine
apache 配置文件的使用方式和优先级的组合。
如果我把 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
。