2012-04-21 89 views
0

我有/var/www/html/zend_example下安装了默认的Zend Framework应用程序。公共目录是:/var/www/html/zend_example/public配置Zend Framework忽略其他目录并在子目录中工作?

我也有/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下)。

眼下,所有的请求重定向(或重写?)到基URL(HTTP:// MYDOMAIN)。

谢谢!

编辑#1

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

编辑#2

如果我禁用除了zend_example一个所有虚拟主机和zend_example虚拟主机有DocumentRoot /var/www/html集,然后我能够http://MYDOMAIN/zend_example/public下运行的Zend的网站,其中包括特定的默认Zend的路线,如http://MYDOMAIN/zend_example/public/index/index。当我启用另一个虚拟主机时,这会中断,但我仍然可以访问Zend的主索引页面http://MYDOMAIN/zend_example/public

编辑#3

我结束了这个酝酿了好几个小时。似乎有一些独特的配置需要完成,因为我的服务器是centos 6.0。我最终设置了Debian 6.0服务器,并能够正确地设置我的虚拟主机,包括Zend站点!不过,我仍然想回来解决centos问题。

+0

该设置看起来对我来说很合适。它不工作?我唯一要补充的是,如果你还没有成为其他站点的VHost – vascowhite 2012-04-21 07:26:40

+0

@vascowhite Zend站点正在工作,除了它只能在'http:// MYDOMAIN /'而不是'http: // MYDOMAIN/zend_example'。它还可以防止访问诸如“http:// MYDOMAN/other_site /”之类的URL(它只是通过Zend应用程序错误)。 – 2012-04-21 20:28:20

+0

如果这适用于Debian而不是Centos,则问题可能在于某些文件或目录的所有权/权限。我在尝试设置Ubuntu时遇到过这个问题。 – RockyFord 2012-04-22 06:28:12

回答

1

你错过了你的虚拟主机的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 =服务器)

附:如果需要本地主机,则可能必须为本地主机创建一个虚拟主机(如果所有虚拟主机都在一个文件中,则为列表中的第一个虚拟主机)。我知道我必须在Windows上这样做。

+0

ServerName是我的一些困惑的一部分。我正在研究一个远程服务器,我没有连接到一个域名,所以我只是通过IP访问它。我的理解是,如果我为我的Zend应用程序设置本地主机虚拟主机和服务器名称,它仍然必须通过IP(而不是服务器名称)访问。那有意义吗? – 2012-04-21 16:11:15

+0

我添加了您建议的'FollowSymlinks'规则,并为other_site创建了一个虚拟主机。我检查了'/ etc/hosts',它已经有一个localhost行。我正在通过'httpd.conf'查看其他想法。也许有必要注意,无论哪个vhost包含在'httpd.conf'中,第一个出现在'http:// MYDOMAIN /',第二个不能被访问。这就像'DocumentRoot'被忽略。 – 2012-04-21 20:31:27

+0

该网站很偏远,这有一些不同。现在你需要一个合适的虚拟主机和一个处理DNS条目的方法。如果远程位于本地网络上,则可以使用每台客户端计算机上的hosts文件路由到这些站点(或者在服务器上设置一个dns服务器),如果它不在本地网络上,那么您正在处理dns开放的互联网。我有任何问题试图通过IP访问ZF网站,有一个技巧,我不知道。 – RockyFord 2012-04-22 06:27:02