2

我想把 zend 框架 2 放在一个子文件夹中。骨架应用程序通过将整个应用程序放在一个子目录中然后使用 domain.com/path/to/public/index.php 开箱即用,但我想避免使用长 url 并且我不想要除了我的公共文件夹之外,其他所有内容都在我的 DocumentRoot 中。

我想过拥有多个模块,但我的域下还有其他类型的应用程序,并且不能将公用文件夹作为 DocumentRoot,我也不想重新创建我必须成为模块的所有内容,以提供静态页面。理想情况下,最好保留骨架应用程序使用的常规目录结构。

我正在使用带有 RHEL 和/或 CentOS 的典型 LAMP 堆栈。

4

2 回答 2

3

我不知道这是否是最好的方法,但这是一种对我有用的方法。

Apache virtualhosts.conf(您可以将其放入 httpd.conf 并进行一些修改):

<VirtualHost *:80>
    ServerAdmin webmaster@domain.com
    DocumentRoot /var/www/html/apps
    ServerName apps.domain.com:80
    ServerAlias www.apps.domain.com
    UserDir Disabled
    ErrorLog logs/domain_error_log
    Options FollowSymLinks

    <Directory /var/www/html/apps/subdirectory/>
            #same stuff in standard zf2 .htaccess file
            RewriteEngine on
            RewriteCond %{REQUEST_FILENAME} -s [OR]
            RewriteCond %{REQUEST_FILENAME} -l [OR]
            RewriteCond %{REQUEST_FILENAME} -d
            RewriteRule ^.*$ - [NC,L]
            RewriteRule ^.*$ index.php [NC,L]
    </Directory>

应用程序的位置:

/var/www/zf2_app

符号链接:

ln -s /var/www/zf2_app/public/ /var/www/html/apps/subdirectory

有几点需要注意: Directory 指令基于文件系统路径而不是 URI;这是我忘记的 Apache 文档中的一行,因为如果您在 VirtualHost 指令中使用 mod_rewrite 它是基于 URI 的。此外,Options FollowSymLinks 必须打开,符号链接才能工作,mod_rewrite 才能在目录指令中工作。

重新加载 httpd 后,我可以使用以下命令浏览到我的 zf2 应用程序:apps.domain.com/subdirectory/module

这使我能够保持常规的 zf2 骨架应用程序结构。此外,通过将它们放在一起,我可以使用 git(或其他源代码控制)进行推送,而无需拆分。

于 2013-01-18T18:13:20.997 回答
0

我已经像这样在 .htaccess 文件中添加了环境变量,将 .htaccess 的第一行设置为 ZF2_PATH 环境变量(位于应用程序文件夹的根目录)

SetEnv ZF2_PATH /home/homefolder/zendpath
RewriteEngine On
RewriteRule ^\.htaccess$ - [F]
....
...
于 2013-01-19T18:09:46.247 回答