一台服务器上有多个Zend框架站点

时间:2011-09-27 01:43:16

标签: apache zend-framework .htaccess

我在设置httpd.conf或.htaccess文件时无法识别一台服务器上的多个zend框架站点。

对于开发,我只有一台服务器,我正在尝试设置这些网站,以便我可以访问它们,如localhost / app1,localhost / app2等。

现在,当我转到localhost / app1时,它确实成功重定向到localhost / app1 / public / index.php,但是当我转到localhost / app1 / index / index时,我得到了404.

这是我的vhosts文件:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot "/var/www"
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory "/var/www/app1/public">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>
    ErrorLog logs/error.log
    CustomLog logs/access.log common
</VirtualHost>

这是我在/ var / www / app1目录中的.htaccess文件:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d

RewriteRule ^.*$ /app1/public/index.php [NC,R,L]

如果我将vhosts文件中的DocumentRoot行更改为DocumentRoot "/var/www/app1/public",那么app1可以正常工作,但我只能访问那个... http://localhost。这可能吗?我想要发生的是如果/ var / www是文档根目录,那么如果我转到localhost / app1,那些请求需要重定向到localhost / app1 / public / index.php,如果我转到localhost / app2那些请求需要重定向到localhost / app2 / public / index.php。

我希望我能清楚地解释这一点,感谢任何帮助。

最终
我最喜欢Phil的解决方案,因为我不想更改本地hosts文件并使用ServerName指令。如果您为每个应用程序拥有一个单独的域名,那么在生产环境中会很好,但不适用于开发。

除此之外,在使用备用目录提供Web内容时,我遇到了403禁止的问题。正如我所说,权限似乎是正确的问题是SE_Linux,并且文件的安全上下文没有设置为httpd_sys_content_t。我发布了我找到here的解决方案,因为它专门解决了这个问题。感谢。

2 个答案:

答案 0 :(得分:16)

这就是我要做的......

  1. 在文档根目录之外的任意位置安装应用程序,例如/home/sudol/apps/app1/home/sudol/apps/app2。确保您的Apache用户可以遍历此路径并读取文件。

  2. 别名public部分中的<VirtualHost>目录

    Alias /app1 /home/sudol/apps/app1/public
    Alias /app2 /home/sudol/apps/app2/public
    
  3. 在相应的<Directory>部分(每个应用一个)中设置您的访问和重写规则,例如

    <Directory "/home/sudol/apps/app1/public">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    
        RewriteEngine On
        RewriteBase /app1
        RewriteCond %{REQUEST_FILENAME} -s [OR]
        RewriteCond %{REQUEST_FILENAME} -l [OR]
        RewriteCond %{REQUEST_FILENAME} -d
        RewriteRule ^.*$ - [NC,L]
        RewriteRule ^.*$ index.php [NC,L]
    </Directory>
    
  4. 删除.htaccess文件,因为您将不再需要它们

  5. 附录

    确保在应用程序配置中设置唯一的会话名称。您也可以设置特定的cookie路径,但这是可选的,例如

    ; app1/application/configs/application.ini
    resources.session.name = "app1"
    resources.session.cookie_path = "/app1/"
    
    ; app2/application/configs/application.ini
    resources.session.name = "app2"
    resources.session.cookie_path = "/app2/"
    

答案 1 :(得分:1)

最好使用子域名,app1.localhost然后localhost/app1。由于存储cookie的方式(包括会话cookie)可以为您提供后续问题。它们将不匹配或甚至可能重叠。

这是一个设置首选方式的好教程

http://www.dennisplucinik.com/blog/2007/08/16/setting-up-multiple-virtual-hosts-in-wamp/