【问题标题】:How to access to my upper root folders from public_html in my MVC PHP application如何在我的 MVC PHP 应用程序中从 public_html 访问我的上层根文件夹
【发布时间】:2012-12-16 17:39:46
【问题描述】:

我有一个网络应用程序,我的所有文件夹都在 public_html 下,如下所示:

public_html
-页面
-模板
-包括
-风格
-脚本
-图像
index.php

所以我的网站在实时服务器中运行完美(使用 php 5.2.17 版本)。但我想改用面向对象的方法并改变一切,并尝试从 zend 框架结构模型中学习和启发,所以我改变了我的文件夹结构,它在本地运行完美,新结构是这样的:

应用
-模型
-控制器
-意见
-配置
-布局
-模板
图书馆
-功能
public_html
-风格
-脚本
-图像
index.php

所以,我将它转移到实时服务器,现在我的主应用程序不在根目录(public_html)之外,当然我无法从 public_html 访问上层根文件夹(应用程序、库),当然也无法通过 网址
我可以包含它们,但我需要通过锚标记中的 url 访问,以防例如在应用程序文件夹内的视图文件夹中访问我的 login.php。 此外,需要通过 url 从我的脚本文件夹访问控制器文件夹(用于 ajax 调用等)。
我已经读到我需要使用 .htaccess 文件,但我不知道我应该使用什么规则,我应该把它放在哪里以及如何。请有人帮助我,因为我需要它。 请告诉我该怎么办?
问候

【问题讨论】:

  • 在 MVC 模型中,您通常不会尝试通过 URL 直接访问 views 文件夹中的文件。

标签: php .htaccess root public


【解决方案1】:

你错了。仔细看看任何 MVC 框架(例如提到 Zend)。一切都通过公用文件夹中的 index.php 进行。您不需要通过 URL 访问公共文件夹下的任何内容(实际上出于安全原因应该禁止它)。您可以通过内部程序结构和重写规则访问控制器的操作。通常,每个请求都会被强制路由到 index.php,然后您的应用程序会决定它会继续往哪里走。

【讨论】:

  • 感谢您的快速回答。但我已经将我的索引部分分隔为 navbar.php footer.php 等等,并且在我的导航栏中,因为我的菜单在那里我需要参考我的索引页面,即 index_view .php 在views 文件夹中,它还通过include 提供了它的控制器。你能告诉我更多,因为我不完全理解你的意思。我对mvc.thanks 很陌生
  • 您可以将文件包含在 PHP 脚本中,无论它们实际位于文件系统中的哪个位置。为什么不在脚本中包含您的 navbar.php 和 footer.php 呢?您不需要访问它们的 URL。
【解决方案2】:

看看 CodeIgniter,一个 MVC 框架,在它自己的index.php file 中处理文件路由的方式:

$system_path = '系统'; $application_folder = '应用程序'; $view_folder = ''; /* * ------------------------------------------------- -------------- *解决系统路径以提高可靠性 * ------------------------------------------------- -------------- */ // 为 CLI 请求正确设置当前目录 如果(定义('STDIN')) { chdir(目录名(__FILE__)); } if (($_temp = realpath($system_path)) !== FALSE) { $system_path = $_temp.'/'; } 别的 { // 确保有一个斜杠 $system_path = rtrim($system_path, '/').'/'; } // 系统路径是否正确? 如果(!is_dir($system_path)) { header('HTTP/1.1 503 服务不可用。', TRUE, 503); exit('您的系统文件夹路径似乎设置不正确。请打开以下文件并更正:'.pathinfo(__FILE__, PATHINFO_BASENAME)); } /* * ------------------------------------------------- ------------------ * 现在我们知道了路径,设置主路径常量 * ------------------------------------------------- ------------------ */ // 这个文件的名字 定义('SELF',路径信息(__FILE__,PATHINFO_BASENAME)); // 系统文件夹路径 定义('BASEPATH', str_replace('\\', '/', $system_path)); // 前端控制器的路径(这个文件) 定义('FCPATH', str_replace(SELF, '', __FILE__)); // “系统文件夹”的名称 定义('SYSDIR',修剪(strrchr(修剪(BASEPATH,'/'),'/'),'/')); // “应用程序”文件夹的路径 if (is_dir($application_folder)) { if (($_temp = realpath($application_folder)) !== FALSE) { $application_folder = $_temp; } 定义('APPPATH', $application_folder.'/'); } 别的 { if ( !is_dir(BASEPATH.$application_folder.'/')) { header('HTTP/1.1 503 服务不可用。', TRUE, 503); exit('您的应用程序文件夹路径似乎设置不正确。请打开以下文件并更正:'.SELF); } 定义('APPPATH', BASEPATH.$application_folder.'/'); } // “views”文件夹的路径 如果(!is_dir($view_folder)) { if ( !empty($view_folder) && is_dir(APPPATH.$view_folder.'/')) { $view_folder = APPPATH.$view_folder; } elseif ( !is_dir(APPPATH.'views/')) { header('HTTP/1.1 503 服务不可用。', TRUE, 503); exit('您的视图文件夹路径似乎设置不正确。请打开以下文件并更正:'.SELF); } 别的 { $view_folder = APPPATH.'views'; } } if (($_temp = realpath($view_folder)) !== FALSE) { $view_folder = realpath($view_folder).'/'; } 别的 { $view_folder = rtrim($view_folder, '/').'/'; } 定义('VIEWPATH',$view_folder);

您不应该依赖.htaccess,您可能会在mod_rewrite 不可用的环境中遇到问题。

此外,不要从超链接加载views/ 目录中的文件。将所有这些对页面的请求从 index.php 路由到您的controllers/,然后然后使用这些类来加载文件。再次仔细查看 CodeIgniter 的源代码。

【讨论】:

    猜你喜欢
    • 2013-07-23
    • 2019-02-07
    • 2021-01-18
    • 1970-01-01
    • 2013-01-18
    • 2016-10-04
    • 2016-04-30
    • 1970-01-01
    • 2012-05-03
    相关资源
    最近更新 更多