繁体   English   中英

在子目录中运行ZendFramework项目

[英]Running a ZendFramework project inside a subdirectory

我有一个ZendFramework项目,我想在子目录中运行。

目前,我的文档根目录位于/ var / www ,项目位于/ var / www / project项目目录中包含各种文件夹( controllerspublic等等)。

我正在尝试将所有来自http:// webserver / project / *的请求传递到/var/www/project/public/index.php文件。 但是,尝试在/var/www/project/.htaccess中使用以下代码传递所有请求不起作用:

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

/ var / www / project / public中还有一个.htaccess文件,其中包含完全相同的代码,但是在加载/ project URL时,仅显示了项目内容的目录索引。

我知道这是一个古老的问题,问问者早就知道了他的问题,但我只是遇到了这个问题。 这是我找到的最简单的解决方案,希望到达这里的其他任何人都可以看到。

在您的VirtualHost文件中,只需在标签上添加一个Alias权限即可创建一个VirtualHost文件,如下所示

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    ServerAdmin admin@example.com
    DocumentRoot /home/user/example.com/public_html/
    ErrorLog /home/user/example.com/logs/error.log
    CustomLog /home/user/example.com/logs/access.log combined

    Alias /zend/albums /home/user/example.com/zf2-tutorial/public 

    <Directory /home/user/example.com/public_html>
        AllowOverride All
        Header set Access-Control-Allow-Origin: "http://localhost"
    </Directory>
 </VirtualHost>

编辑:刚发现您将必须编辑.htaccess(在公共目录中)以包括此行(与上面的示例一起进行):

RewriteBase /zend/albums

这是Phil的一个很好的答案,类似于我的,但是他完全删除了.htaccess文件,而是将规则放入VirtualHosts文件中。 https://stackoverflow.com/a/7563414/1031714

我将项目与文档根完全分开存储,例如/home/user/projects/project

然后,只需将/var/www/project符号链接到/home/user/projects/project/public

如果您对任何静态资产链接(JavaScript,图像,CSS等)使用BaseUrl视图帮助器,它应该可以正常工作。

编辑 :另一个建议是将您的公共目录与应用程序的其余部分分开。

例如,假设您的项目位于/home/user/projects/project ,将public目录的内容移至/var/www/project并使用以下命令编辑index.php

defined('APPLICATION_PATH')
    || define('APPLICATION_PATH', '/home/user/projects/project/application');

删除第一个RewriteRule:表示将所有地址重写为空( - )并停止( [L]标志)。

编辑:这应该符合您的需求

RewriteCond %{REQUEST_FILENAME} !project/public/.*
RewriteRule ^project/(.*)$ project/public/$1 [NC,L]       

RewriteCond %{REQUEST_FILENAME} !-s      
RewriteCond %{REQUEST_FILENAME} !-l      
RewriteCond %{REQUEST_FILENAME} !-d      
RewriteRule ^.*$ /project/public/index.php [NC,L] 

这会将对项目/不包含公共/的任何请求重写为对项目/公共/的请求。 下一个将任何调用重定向到同一目录中不存在的文件或目录到index.php。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM