配置Zend Framework忽略其他目录并在子目录中工作?

时间:2012-04-21 04:41:08

标签: apache zend-framework mod-rewrite

我在/var/www/html/zend_example下安装了默认的Zend Framework应用程序。公共目录是:/var/www/html/zend_example/public

我在/var/www/html中还有其他非zend网站。例如,/var/www/html/other_site

如何将ZF网站配置为在http://MYDOMAIN/zend_example下工作,同时允许http://MYDOMAIN/other_site工作?

这是我的apache配置文件:

<VirtualHost *:80>
    DocumentRoot /var/www/html/zend_example/public
    SetEnv APPLICATION_ENV "development"
    <Directory /var/www/html/zend_example/public>
        DirectoryIndex index.php
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

以下是.htaccess中的/var/www/html/zend_example/public文件:

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

我只是希望启动并运行开发ZF站点,同时还有其他站点可用(在相同的基本URL下)。

现在,所有请求都会重定向(或重写?)到基本网址(http:// MYDOMAIN)。

谢谢!

编辑#1

我为zend_exampleother_site编辑了vhost,因此每个DocumentRoot都设置为/var/www/html,而不是每个网站的子目录。这样就可以访问各自网址中的两个网站 - other_site:http://MYDOMAIN/other_site和zend_example:http://MYDOMAIN/zend_example/public。现在,我认为.htaccess目录中的/var/www/html/zend_example/public文件存在问题。我无法访问应该指向IndexController的默认“Zend”URL,例如http://MYDOMAIN/zend_example/public/index/index。相反,我收到了404错误。

编辑#2

如果我禁用除zend_example之外的所有vhost,并且zend_example vhost设置了DocumentRoot /var/www/html,那么我可以在http://MYDOMAIN/zend_example/public下运行Zend站点,包括特定的默认Zend路线,例如http://MYDOMAIN/zend_example/public/index/index。当我启用另一个vhost时,这会中断,尽管我仍然可以在http://MYDOMAIN/zend_example/public访问Zend的主索引页。

编辑#3

我最终玩弄了几个小时。由于我的服务器 centos 6.0 ,似乎需要完成一些独特的配置。我最终设置了Debian 6.0服务器并且能够正确设置我的虚拟主机,包括Zend站点!不过,我仍然想回来解决这个问题。

1 个答案:

答案 0 :(得分:1)

您错过了vhost中的ServerName选项。如果您在目录声明中不允许followSymlinks,也可能会遇到一些困难,尝试类似:

//the ServerName is the name that would follow http:// (http://zend.example/module/controller/action)

<VirtualHost *:80>
    DocumentRoot /var/www/html/zend_example/public
    ServerName zend.example
    SetEnv APPLICATION_ENV "development"
    <Directory /var/www/html/zend_example/public>
        DirectoryIndex index.php
        Options Indexes FollowSymlinks
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

我不是* nix用户,因此我不确定您是否更改了类似于Windows主机文件的任何内容,但可能需要进行调查。 (看起来您必须编辑hosts文件,它应该在/etc/hosts添加一行,如127.0.0.1 zend.example,其中zend.example =来自您的vhost的ServerName)

P.S。如果你需要localhost,你可能必须为localhost创建一个vhost(作为列表中的第一个,如果你的所有vhost都在一个文件中)。我知道我必须在Windows上这样做。