我想禁用所有我的用户目录的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 ,它指定创build一个新的文件用下面的行(我认为这是不重要的,如果它分开conf.d但它是更清洁的imo所以我遵守):
/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>
这些指令被添加到Apacheconfiguration,我可以看到在服务器信息:
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从default虚拟主机中删除,PHP的作品,但它适用于所有目录中的所有用户。 我只是希望它为那个子目录工作。
这里描述了 Apache用来合并不同部分的指令的优先顺序。 这可能很难得到正确的,这似乎是优先级不明确,而不是你想要或期望的情况。
在这种情况下,您可以通过将<Directory>部分更改为具有更高优先级的部分来强制优先级,例如:
<DirectoryMatch ^/home/gunther/public_html/php/> ... </DirectoryMatch>
要么
<Location /~gunther/php> ... </Location>
据我了解,这是如何使用php_admin_value engine和Apacheconfiguration文件的优先级的组合。
如果我把dis / enable放在彼此旁边,使用engine 1而不是engine on ,它可以工作,所有其他的组合都不起作用。 如果有人有解释,请告诉!
我结束了在php5.conf文件中的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之前加载。