如何从我的MVC PHP应用程序中的public_html访问我的上层根文件夹

时间:2012-12-16 17:39:47

标签: php .htaccess root public

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

的public_html
 -pages
 -templates
  - 包括
 -styles
 -scripts
 -images
 的index.php

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

应用
   -models
   -controllers
  -views
  -config
  -layouts
    -templates

  -functions
的public_html
  -styles
  -scripts
  -images
  的index.php

所以,我把它转移到实时服务器,现在我的主应用程序是root(public_html),当然我不能从public_html访问上层根文件夹(应用程序,库),当然还有 URL 的即可。
我可以包含它们,但我需要在锚标记中通过 url 访问,以便例如在应用程序文件夹中的views文件夹中查看我的login.php。 另外,需要通过url从我的脚本文件夹访问controoler文件夹(用于ajax调用等)。
我已经读过我需要使用.htaccess文件,但我不知道我应该使用什么规则,我应该把它放在哪里以及如何帮助我,因为我急需它。 请告诉我该怎么办?
问候

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

$system_path = 'system';
$application_folder = 'application';
$view_folder = '';

/*
 * ---------------------------------------------------------------
 *  Resolve the system path for increased reliability
 * ---------------------------------------------------------------
 */

    // Set the current directory correctly for CLI requests
    if (defined('STDIN'))
    {
        chdir(dirname(__FILE__));
    }

    if (($_temp = realpath($system_path)) !== FALSE)
    {
        $system_path = $_temp.'/';
    }
    else
    {
        // Ensure there's a trailing slash
        $system_path = rtrim($system_path, '/').'/';
    }

    // Is the system path correct?
    if ( ! is_dir($system_path))
    {
        header('HTTP/1.1 503 Service Unavailable.', TRUE, 503);
        exit('Your system folder path does not appear to be set correctly. Please open the following file and correct this: '.pathinfo(__FILE__, PATHINFO_BASENAME));
    }

/*
 * -------------------------------------------------------------------
 *  Now that we know the path, set the main path constants
 * -------------------------------------------------------------------
 */
    // The name of THIS file
    define('SELF', pathinfo(__FILE__, PATHINFO_BASENAME));

    // Path to the system folder
    define('BASEPATH', str_replace('\\', '/', $system_path));

    // Path to the front controller (this file)
    define('FCPATH', str_replace(SELF, '', __FILE__));

    // Name of the "system folder"
    define('SYSDIR', trim(strrchr(trim(BASEPATH, '/'), '/'), '/'));

    // The path to the "application" folder
    if (is_dir($application_folder))
    {
        if (($_temp = realpath($application_folder)) !== FALSE)
        {
            $application_folder = $_temp;
        }

        define('APPPATH', $application_folder.'/');
    }
    else
    {
        if ( ! is_dir(BASEPATH.$application_folder.'/'))
        {
            header('HTTP/1.1 503 Service Unavailable.', TRUE, 503);
            exit('Your application folder path does not appear to be set correctly. Please open the following file and correct this: '.SELF);
        }

        define('APPPATH', BASEPATH.$application_folder.'/');
    }

    // The path to the "views" folder
    if ( ! 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 Service Unavailable.', TRUE, 503);
            exit('Your view folder path does not appear to be set correctly. Please open the following file and correct this: '.SELF);
        }
        else
        {
            $view_folder = APPPATH.'views';
        }
    }

    if (($_temp = realpath($view_folder)) !== FALSE)
    {
        $view_folder = realpath($view_folder).'/';
    }
    else
    {
        $view_folder = rtrim($view_folder, '/').'/';
    }

    define('VIEWPATH', $view_folder);

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

此外,请勿从超链接加载views/目录中的文件。将所有这些页面请求从index.php路由到controllers/,然后然后使用这些类来加载文件。仔细查看CodeIgniter的来源以获取想法。