If you are running apache on MPM Prefork, you can apply php restrictions for security or additional settings such as memory limit. Also, you can disable functions or php engine per directory or virtualhost.
Standard virtualhost example:
<VirtualHost *> DocumentRoot /home/tex/www/example.com ServerName example.com ServerAlias example.com ServerAdmin admin@example.com ErrorLog ${APACHE_LOG_DIR}/example.com-error_log CustomLog ${APACHE_LOG_DIR}/example.com-access_log combined </VirtualHost>
Virtualhost with open_basedir restriction:
<VirtualHost *> DocumentRoot /home/tex/www/example.com ServerName example.com ServerAlias example.com ServerAdmin admin@example.com ErrorLog ${APACHE_LOG_DIR}/example.com-error_log CustomLog ${APACHE_LOG_DIR}/example.com-access_log combined php_admin_value open_basedir "/home/tex/www/example.com:/tmp:/usr/share/php:/var/lib/php5" </VirtualHost>
open_basedir prevents users from opening files outside of their directory with php scripts. It is an important security feature which stops malicious scripts from being able to access important information. When a script tries to access the filesystem, for example using include, or fopen(), the location of the file is checked. When the file is outside the specified directory-tree, php will refuse to access it.
Virtualhost with open_basedir restriction including some disabled php functions:
<VirtualHost *> DocumentRoot /home/tex/www/example.com ServerName example.com ServerAlias example.com ServerAdmin admin@example.com ErrorLog ${APACHE_LOG_DIR}/example.com-error_log CustomLog ${APACHE_LOG_DIR}/example.com-access_log combined php_admin_value disable_functions "exec,shell_exec,system,passthru,escapeshellcmd,escapeshellarg,proc_open,popen,parse_ini_file" php_admin_value open_basedir "/home/tex/www/example.com:/tmp:/usr/share/php:/var/lib/php5" </VirtualHost>
Disabling php per virtualhost. Maybe the user have only a static web page…
<VirtualHost *> DocumentRoot /home/tex/www/example.com ServerName example.com ServerAlias example.com ServerAdmin admin@example.com ErrorLog ${APACHE_LOG_DIR}/example.com-error_log CustomLog ${APACHE_LOG_DIR}/example.com-access_log combined php_admin_flag engine off </VirtualHost>
On systems with multiple users, each user can be permitted to have a web site in their home directory using the “UserDir” directive. Visitors to a url “http://www.example.com/~username/” will get content out of the home directory of the user “username”, out of the subdirectory specified by the UserDir directive.
Example:
UserDir public_html
You can also disable php engine for all users who use this feature. (for example, on a university server)
<Directory "/home/*/public_html"> php_admin_flag engine off </Directory>