1

当您将 Zend Framework 网站部署到共享主机时,通常无法将 DocumentRoot 更改为指向网站的 public/ 文件夹。因此,该网站的 URL 现在是http://www.example.com/public/。这看起来不太专业,所以我想删除它。到目前为止,我一直在使用 ZF1,Rob Allen 在他的博客http://akrabat.com/zend-framework/zend-framework-on-a-shared-host/上提供了一种方法。我试图为 ZF2 修改这个。他建议在根目录中放置一个 index.php 文件,其中包含以下内容:

include 'public/index.php';

完成此操作后,http://www.example.com可以正常打开索引页面,但 CSS 链接已损坏。Rob 添加了一个控制器插件来将 baseUrl 重置为 /public 以处理面向公众的 CSS 和图像文件等。为此,我在 ZF2 中找到了来自 Matthew Weier O' Phinney http://zend-framework-community.634137 的项目。 n4.nabble.com/Setting-the-base-url-in-ZF2-MVC-td3946284.html他描述了如何设置baseUrl。根据他的代码,我将其添加到 modules/Application/Module.php

class Module {
    public function onBootstrap(MvcEvent $e) {
        $config          = $e->getApplication()->getServiceManager()->get('config');
        $router          = $e->getApplication()->getServiceManager()->get('router');        
        $router->setBaseUrl($config['base_url']);
    }
}

base_url 键在 modules/Application/configs/module.config.php 中设置:

'base_url' => '/public'

我能够转储路由器对象并确认在此阶段正确设置了 base_url。不幸的是,现在http://www.example.com不再打开索引页面并给出 404 路由错误。

有没有人能告诉我我做错了什么或指出我在共享托管环境中运行 ZF2 站点的正确方向?

4

1 回答 1

5

你在使用骨架应用程序吗?

这似乎有点过头了,肯定比这简单得多。

将所有内容从公共移动到根

更改 index.php

<?php
/**
 * This makes our life easier when dealing with paths. Everything is relative
 * to the application root now.
 */
//chdir(dirname(__DIR__));
chdir(__DIR__);

// Setup autoloading
require 'init_autoloader.php';

// Run the application!
Zend\Mvc\Application::init(require 'config/application.config.php')->run();

简单的。

如果您正在运行这样的应用程序,您可能希望使用 htaccess 等阻止对某些 Zend Framework 文件夹的直接访问

于 2013-03-06T15:18:58.923 回答