使用.htaccess在目录(包括所有子目录)中禁用PHP
我正在做一个网站,允许人们上传文件,HTML网页等…现在我有一个问题。 我有这样的目录结构:
-/USERS -/DEMO1 -/DEMO2 -/DEMO3 -/etc... (every user has his own direcory here) -index.php -control_panel.php -.htaccess
现在我想禁用PHP,但启用服务器端包括在/ USERS的直接和子目录
这可以做到(以及如何:))? 提前致谢。
顺便说一下,我使用WAMP服务器
尝试禁用.htaccess文件中的engine
选项 :
php_flag engine off
要禁用所有对子窗口的访问(最安全),请使用:
<Directory full-path-to/USERS> Order Deny,Allow Deny from All </Directory>
如果你只想阻止PHP文件被直接服务,那么做:
1 – 确保你知道什么文件扩展名的服务器识别为PHP(并且不允许人们在htaccess覆盖)。 我的一台服务器设置为:
# Example of existing recognized extenstions: AddType application/x-httpd-php .php .phtml .php3
2 – 基于扩展添加正则expression式到FilesMatch(或LocationMatch)
<Directory full-path-to/USERS> <FilesMatch "(?i)\.(php|php3?|phtml)$"> Order Deny,Allow Deny from All </FilesMatch> </Directory>
或者使用Location来匹配php文件(我更喜欢上面的文件方法)
<LocationMatch "/USERS/.*(?i)\.(php3?|phtml)$"> Order Deny,Allow Deny from All </LocationMatch>
如果你使用的是mod_php,你可以把它放在/ USERS的.htaccess文件里,或者放在USERS目录的httpd.conf文件中。
RemoveHandler .php
要么
RemoveType .php
(取决于是否使用AddHandler或AddType启用PHP)
从另一个目录运行的PHP文件仍然能够在/ USERS中包含文件(假设没有open_basedir限制),因为这不通过Apache。 如果使用apache访问php文件,它将被作为纯文本服务器。
编辑
兰斯·拉欣的解决scheme只是拒绝访问文件可能会更好
<Directory /your/directorypath/> php_admin_value engine Off </Directory>
这将显示源代码而不是执行它:
<VirtualHost *> ServerName sourcecode.testserver.me DocumentRoot /var/www/example AddType text/plain php </VirtualHost>
我曾经使用过一次,以使其他同事能够从本地networking读取源代码(只是一个快速和肮脏的select)。
警告 ! :
正如丹指出的,这种方法不应该用于生产。 请按照接受的答案,因为它阻止任何尝试执行或显示PHP文件。
如果你想要用户共享php文件(并让其他人显示源代码),有更好的方法来做到这一点,如git,维基等。
这个方法应该避免! (你已经被警告过了,为了教育目的在这里留下来)
这可能是矫枉过正的 – 但要小心做任何依赖PHP文件扩展名为.php
东西 – 如果有人稍后出现,并为.php4
或甚至.html
添加处理程序,以便由PHP处理。 从Apache的不同实例或者其他只能提供静态内容的东西中提取这些目录中的文件可能会更好。
这些答案都没有为我工作(要么产生500错误或什么都不做)。 这可能是由于我正在托pipe服务器上,我无法访问Apacheconfiguration。
但是这对我有效:
RewriteRule ^.*\.php$ - [F,L]
对于以.php
结尾并以此子目录结束的URL,此行将生成403 Forbidden错误。
@Oussama带领我走向正确的方向,感谢他。
尝试这个:
<FilesMatch "\.((php[0-9]?)|p?html?|pl|sh|java|cpp|c|h|js|rc)$"> SetHandler None </FilesMatch>