我想让用户无法访问我服务器上运行的某些脚本。
我能解释这个的最好方法是解释网站根级如何运作的简要说明。
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命令时,我并不是所有人都知道的,而且我不确定这是否有可能走这条路。
是否有人对这样的事情有更多的了解,比如提出他们的意见或任何意见或建议?
答案 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服务器的根目录下。