我正在建立一个允许人们上传文件,html页面等的网站......现在我遇到了问题.我有这样的目录结构:
-/USERS
-/DEMO1
-/DEMO2
-/DEMO3
-/etc... (every user has his own direcory here)
-index.php
-control_panel.php
-.htaccess
Run Code Online (Sandbox Code Playgroud)
现在我想禁用PHP,但在/ USERS内的direcories和子目录中启用服务器端包含
可以这样做(以及如何:))?提前致谢.
顺便说一下,我使用的是WAMP服务器
Gum*_*mbo 115
尝试禁用.htaccess文件中的engine
选项:
php_flag engine off
Run Code Online (Sandbox Code Playgroud)
Lan*_*ing 48
要禁用对子目录的所有访问(最安全),请使用:
<Directory full-path-to/USERS>
Order Deny,Allow
Deny from All
</Directory>
Run Code Online (Sandbox Code Playgroud)
如果您只想阻止直接提供PHP文件,请执行以下操作:
1 - 确保您知道服务器识别为PHP的文件扩展名(并且不允许人们在htaccess中覆盖).我的一台服务器设置为:
# Example of existing recognized extenstions:
AddType application/x-httpd-php .php .phtml .php3
Run Code Online (Sandbox Code Playgroud)
2 - 基于扩展,将正则表达式添加到FilesMatch(或LocationMatch)
<Directory full-path-to/USERS>
<FilesMatch "(?i)\.(php|php3?|phtml)$">
Order Deny,Allow
Deny from All
</FilesMatch>
</Directory>
Run Code Online (Sandbox Code Playgroud)
或者使用Location来匹配php文件(我更喜欢上面的文件方法)
<LocationMatch "/USERS/.*(?i)\.(php3?|phtml)$">
Order Deny,Allow
Deny from All
</LocationMatch>
Run Code Online (Sandbox Code Playgroud)
Tom*_*igh 13
如果你正在使用mod_php,你可以把(在/ USERS中的.htaccess或者在USERS目录的httpd.conf中)
RemoveHandler .php
Run Code Online (Sandbox Code Playgroud)
要么
RemoveType .php
Run Code Online (Sandbox Code Playgroud)
(取决于是否使用AddHandler或AddType启用PHP)
从另一个目录运行的PHP文件仍然可以包含/ USERS中的文件(假设没有open_basedir限制),因为这不通过Apache.如果使用apache访问php文件,它将作为纯文本服务器.
编辑
Lance Rushing的拒绝访问文件的解决方案可能更好
lep*_*epe 10
这将显示源代码而不是执行它:
<VirtualHost *>
ServerName sourcecode.testserver.me
DocumentRoot /var/www/example
AddType text/plain php
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
我使用它一次,以使其他同事能够从本地网络读取源代码(只是一个快速而又脏的替代方案).
警告 !:
正如丹不久前指出的那样,这种方法绝对不能用于生产.请遵循接受的答案,因为它会阻止任何执行或显示php文件的尝试.
如果你想让用户共享php文件(并让其他人显示源代码),有更好的方法来做,比如git,wiki等.
应该避免这种方法!(你被警告了.把它留在这里用于教育目的)
小智 10
<Directory /your/directorypath/>
php_admin_value engine Off
</Directory>
Run Code Online (Sandbox Code Playgroud)