2

我用这个撞墙了...

我需要在子目录中建立一个 zend 框架应用程序。

即域是 tricell.ss,我想使用 tricell.ss/tricell 作为应用程序主目录。

做了什么:

  1. 我在我的配置(application.ini)中设置了:

    resources.frontController.baseUrl = "/tricell"
    
  2. 我在我的配置中创建了另一个 var

    baseUrl  = "/tricell"
    
  3. 在我的 Boostrap 中,我得到了这个:

    $router     = new Zend_Controller_Router_Rewrite();
    $frontController->setRouter($router);
    $frontController->setBaseUrl($this->config->baseUrl);        
    
    $frontController->dispatch();
    
  4. 在我的布局中,我尝试使用以下方式显示图像:

    $this->baseUrl('/img/btn.png')
    
  5. 这是我的虚拟主机配置:

    <VirtualHost *:80>
    DocumentRoot "/HTDOCS/tricell/tricell/public_html"
    ServerName tricell.ss
    RewriteRule ^$ [L] 
    
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^(www.)?tricell.ss$
    RewriteRule ^(/)?$ tricell [L]
    </VirtualHost>
    
  6. 这是我的.htaccess:

SetEnv APPLICATION_ENV 开发

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

问题是当我尝试显示图像时没有任何反应。当我试图通过 URL 获取图像时:

http://tricell.ss//tricell/img/btn.png

我收到有关错误控制器的信息。我怎样才能做到这一点?我可以(没有任何问题)为 tricell.ss 之类的根域进行配置,然后获取图像,即 tricell/ss/img/btn.png,但我想在子目录上工作,而我不能用图像来做到这一点。我在这里做错了什么?

4

3 回答 3

1

我认为你可以做的最简单的事情是:

从一个新的 ZF 项目开始,或者删除所有的 zend 路由,以及您创建的 .htaccess 或 httpd.conf/httpd-vhosts.conf 中的任何特殊配置。

摆脱您在配置文件中设置的 baseUrl 选项。

将 index.php 文件和 .htaccess 文件放在您的/HTDOCS/tricell/tricell/public_html/tricell文件夹中。

将项目的其余部分(控制器、模型、配置等)放在 Web 根目录之外。在这个例子中,我假设它们被放置在/HTDOCS/tricell/tricell/zfproject.

编辑 index.php 并更改:

defined('APPLICATION_PATH')
    || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));

// to:

defined('APPLICATION_PATH')
    || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../../zfproject/application'));

现在,您的应用程序将使用 yoursite.com/tricell 的基本目录运行

IndexController.php 的 URL 将是http://yoursite.com/tricell/index

您不需要做任何特别的事情来告诉 Zend 您的基本 URL 是“tricell”。只需确保在您的视图脚本中使用$this->baseUrl()您的路径,这样您就不必担心手动将 /tricell 添加到所有内容的开头,并且如果您将项目移动到另一个目录/路径,则无需将任何内容更改为处理新的路径。

于 2011-11-30T22:50:54.243 回答
1

我刚刚设法解决了我的问题......这很简单,但我对所有这些重写规则感到非常困惑。

正如所说的总是三细胞令人困惑,让我们也对其进行一些更改。因此,要实现 tricell.ss/sub 之类的东西,我需要:

  1. 将我的整个应用程序放入 /HTDOCS/tricell/tricell/sub
  2. 将此行更改我的虚拟主机: DocumentRoot "/HTDOCS/tricell/tricell/public_html" 为: DocumentRoot "/HTDOCS/tricell/tricell/"
  3. 在我的 /HTDOCS/tricell/tricell/sub 目录中插入另一个 .htaccess:

    重写引擎开启

重写规则 ^.htaccess$ - [F]

RewriteCond %{REQUEST_URI} ="" RewriteRule ^.*$ /sub/ublic_html/index.php [NC,L]

RewriteCond %{REQUEST_URI} !^/sub/public_html/。$ RewriteRule ^(. )$ /sub/public_html/$1

RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^.*$ - [NC,L]

重写规则 ^public_html/.*$ /sub/public_html/index.php [NC,L]

这解决了我的所有问题。

于 2011-12-01T10:45:56.613 回答
0
<IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteBase /
 RewriteCond %{REQUEST_URI} "/tour/"
 RewriteRule (.*) /tour/index.php [L,END]
</IfModule>

根文件夹 domain.com/.htaccess 中的上述代码对我有用。我将它直接放在 htaccess 中“# BEGIN WordPress”部分之前的第一件事。

  • 在 domain.com/tour/ 子目录中安装 Zend
  • wordpress 在根 domain.com/ 级别上运行

最后的诀窍是让 RewriteRule 指向 Zend 的 index.php,如果 Request_URI 匹配 /tour/

于 2019-12-11T08:20:10.090 回答