一个索引.php处理所有事情


one index.php to handle everything

我目前正在为小项目开发php中的迷你cms。首先,我要说的是,我对这种语言只有基本的了解。

在尝试为该迷你CMS开发登录页面时,我在github上搜索了项目,并遇到了名为"php-login-minimal"的项目。

我已经根据我的项目实施了它,但我有一些麻烦如下;

它使用视图并通过 .htaccess 保护该视图免受外部访问,其中包括以下命令;

# This file prevents that your .php view files are accessed directly from the outside
<Files ~ "'.(htaccess|php)$">
order allow,deny
deny from all
</Files>

如果用户像这样登录,则调用该视图;

// ... ask if we are logged in here:
if ($login->isUserLoggedIn() == true) {
    // the user is logged in. you can do whatever you want here.
    // for demonstration purposes, we simply show the "you are logged in" view.
    include("views/logged_in.php");
} else {
    // the user is not logged in. you can do whatever you want here.
    // for demonstration purposes, we simply show the "you are not logged in" view.
    include("views/not_logged_in.php");
}

麻烦从这里开始。在我的项目的"logged_in.php"文件中,有导航链接,可将用户重定向到该视图以创建、更新页面或帖子,如下所示;

<li class="active">
 <a href="<?php echo ADMIN_ROOT; ?>index.php">main panel</a>
</li>
<li>
<a href="<?php echo ADMIN_ROOT; >page/pageManagement.php">pages</a>
 <ul>
  <li class="green"><a href='<?php echo ADMIN_ROOT; ?>page/createPage.php'>create new page</a>
  </li>
 </ul>
</li>

因此,正如预期的那样,当我单击该链接时,它向我显示禁止的消息。我该如何处理这个问题,或者你能引导我找到更好的解决方案?

谢谢。

更好的解决方案是一种意见...

但是有一些有效的参数可以阻止直接访问.php代码:

干净的网址一致性:

通过阻止直接访问,您可以保证您的网站网址方案将得到尊重,避免以不同的方式访问您的页面。

网址寿命:

您的 URL 不直接连接到文件结构,因此即使您更改网站结构或编程语言,也可以维护它。

安全:

并非所有的 php 文件都必须通过 URL 加载,其中一些文件旨在包含在其他 php 文件中。防止直接访问这些页面的另一种方法是在父文件中声明一个全局变量,并在包含文件中声明一个全局变量,如果该变量未定义,则停止执行。


使用一个页面路由所有请求是另一种常见做法,它的优点是简化 RewriteRule 条件并在一页代码中干净地控制所有重定向。从某种意义上说,它是迈向更复杂的架构模式的第一步。我看到您的第 3 部分脚本包含"视图/...":可能它指的是 MVC 模式。

因此,如果您选择保留原始 URL 结构,则必须删除 .htaccess 文件,否则您必须重写 URL 并修改 .htaccess 文件,添加重定向到索引的 RewriteRule 条件.php(或其他路由器文件名)。