防止用户直接访问此E.g中的results.php。 root(包含) - > “index.php”(包括) - > “results.php”

时间:2012-01-08 08:59:31

标签: php .htaccess

我想让用户无法访问我服务器上运行的某些脚本。

我能解释这个的最好方法是解释网站根级如何运作的简要说明。

ROOT包含4个脚本:

的index.php home.php error.php results.php

在索引文件中,我已经在某些情况下包含并指导用户访问这3个文件。

现在,这会引起一些问题,因为索引文件包含必要的控制器和任何附加脚本,然后才会包含新脚本并且用户的观点会更改为新的“网页”。我这样做了,因为它为用户提供了非常快速的体验,因为页面加载时间变得非常低。

现在,这些文件已使用机器人无索引元素设置,并从站点地图中删除。我想更进一步,让用户无法直接访问这些脚本,例如输入http://www.mysite.com/results.php

这是因为如果他们这样做,他们会遇到一个丑陋的,不感兴趣的页面,它没有布局变量,或者定义了主要的css样式表。

以下是index.php的简要概述:

<?php
ob_start();

$activeHome = 'active';

require_once $_SERVER['DOCUMENT_ROOT'] . '/../../includes/config.php';
require_once($docRoot . '/includes/layout.php');

...

include 'home.php';
?>

此脚本包含配置其他3个脚本的所有代码。如在

if (isset($_GET['register']))
{
header('Location: http://www.mysite.com/register/');
exit();
}

以下是home / results / error.php

的相同内容
<?php

....

echo $head1 . $pageDetails . $head2 . $header .  $pageContent . $footer;
exit;
?>

在这些脚本中,除了pageDetails和pageContent之外的所有变量都在布局脚本中与主css文件一起定义。

因此,你可以通过本网站的设置看到,我没有很多选项,除非通过php函数限制这些页面,我认为这将是相当复杂的,而且可能超过我的头脑......我认为这将涉及大量使用全局或会话变量,这不是我所有人都热衷的事情。我认为,更简单的方法是通过htaccess文件来完成此操作。但是当谈到htaccess命令时,我并不是所有人都知道的,而且我不确定这是否有可能走这条路。

是否有人对这样的事情有更多的了解,比如提出他们的意见或任何意见或建议?

2 个答案:

答案 0 :(得分:3)

你有两个选择。

<强> 1。将文件移到Web根目录之外 - 这在逻辑上更有意义。如果Web服务器不打算访问这些文件,则它们应该位于Web根目录之外。只要您(以及Web服务器的用户和组)可以访问包含您的PHP脚本的目录,这将是首选方法。它也更为可取,因为您不需要特定于Apache(甚至特定于mod_rewrite)的.htaccess规则,因此这可以移植到大多数其他服务器风格。示例目录结构可能如下所示:

/
    /www
        /index.php
    /includes
        /home.php
        /error.php
        /results.php

只需确保您的网络服务器用户可以访问www和includes,并且您的网络服务器配置允许您在Web根目录之外工作(大多数apache配置只允许您在其中工作)。

<强> 2。添加htaccess规则以防止访问这些 - 这不太可取。如果你想要顽固,或者你有合法的理由将文件保存在你的web根目录中,这就是在Apache上做这件事的方法。

RewriteEngine On
RewriteRule ^(home.php|error.php|results.php)$ - [L]

阻止用户访问/register/register.php:

RewriteEngine On
RewriteRule ^register/register.php$ - [L]

答案 1 :(得分:1)

如果文件只能从其他脚本访问,而不是直接通过HTTP访问,则不要将其保留在HTTP服务器的根目录下。