返回PHP文件以纯文本格式,除了指数
我想知道,有没有办法可以阻止其他PHP文件在我的服务器上,除了在根文件夹中index.php
,这是我所有呼叫重定向到这个文件的执行返回PHP文件以纯文本格式,除了指数
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^.*$ index.php [L,NS]
我不知道什么样的-d
,-f
,-l
单独做的,我所知道的是,他们允许像的图像和文件的东西要返回的不是重写地址index.php
为好。糟糕的是他们允许像site.com/somescript.php
这样的地址也被执行。
我想知道是否有可能禁用在根文件夹中的任何其他PHP文件的执行,但不使它无法访问,即将其作为纯文本返回?
只需创建一个禁止任何请求在.php
结束,除了/index.php
另一个重写规则:
RewriteCond %{REQUEST_URI} !^/index.php$
RewriteRule \.php$ - [R=403,L,NC]
或者,如果你想成为另一个.php
文件为纯文本:
<FilesMatch "\.php$">
RemoveHandler .php
php_flag engine off
</FilesMatch>
<Files index.php>
AddHandler php5-script .php
php_flag engine on
</Files>
这是我最终要做的,但我希望我可以以纯文本形式返回文件,而不是拒绝访问它? – 2014-09-03 15:39:37
@php_nub_qq添加了一个新的解决方案,应该按照你想要的方式工作。理想情况下,您可以将任何敏感的PHP文件移出公共目录! – amarcus 2014-09-03 15:58:12
此问题的典型解决方案是将所有PHP代码(index.php除外)移到DOCUMENT_ROOT dirrectory之外,以便Apache无法看到它们。比如,你现在有:
/path/to/site.com
index.php
other1.php
other2.php
理想情况下,你想要的东西,如:
/path/to/site.com/public
index.php
/path/to/site.com/lib
other1.php
other2.php
然后在你的Apache配置,你点/path/to/site.com/public,而不是/路径/到/ site.com。这样,您的库文件对Apache不可见,不能直接请求。请注意,这可能需要对代码进行一些更改,因为现在您的包含已经移动了,但这可能只需通过更改include_path即可完成。
是的,这是我的。但我想明确禁止在公共目录中执行其他的PHP脚本,尽管我没有任何其他的。 – 2014-09-03 15:20:07
的 - d/-f/-l表示“如果请求的内容不是现有目录,现有文件或现有符号链接,则在其位置提供index.php。” – 2014-09-03 15:14:53