禁用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 ,它指定创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 offdefault虚拟主机中删除,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-enabledconf.d之前加载。