返回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文件的执行,但不使它无法访问,即将其作为纯文本返回?

+0

的 - d/-f/-l表示“如果请求的内容不是现有目录,现有文件或现有符号链接,则在其位置提供index.php。” – 2014-09-03 15:14:53

只需创建一个禁止任何请求在.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> 
+0

这是我最终要做的,但我希望我可以以纯文本形式返回文件,而不是拒绝访问它? – 2014-09-03 15:39:37

+0

@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即可完成。

+0

是的,这是我的。但我想明确禁止在公共目录中执行其他的PHP脚本,尽管我没有任何其他的。 – 2014-09-03 15:20:07