2011-04-11 114 views
1

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

目前我的文档根目录是在在/ var/WWW,该项目是在在/ var/WWW /项目与各个文件夹(控制器公共等)内的所有项目目录。

我试图让这个来自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] 

还有一个.htaccess文件在/ var/WWW /项目/公开,其中包含完全相同的代码,但是当加载/项目 URL时,我只显示项目内容的目录索引。

回答

0

我会将项目完全独立于文档根目录,例如/home/user/projects/project

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

假设你对任何静态资产链接(JavaScript,图像,CSS等)使用BaseUrl视图助手,它应该可以正常工作。

编辑:另一个建议是从应用程序的其余部分分离的公共目录。

例如,假设你的项目是/home/user/projects/project,将您public目录的内容/var/www/project并用以下

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

编辑index.php删除第一个重写规则:跟它的所有地址重写不了了之(-)并停止([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] 

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

+0

不,它说离开所有请求真正的文件(大小大于零),符号链接和目录本身。 – Phil 2011-04-12 01:23:52

+0

是的,但是当他调用'project /'这是一个目录时,他没有重写,所以他最终只在'/ var/www/project /'而不是'/ var/www/project/public'中。 – 2011-04-12 07:56:43

0

我知道这是一个老问题,提问者早就知道他的问题了,但我只是碰到了它。这是我发现的最简单的解决方案,希望在这里到达的任何其他人都能看到这一点。

在你的虚拟主机文件只需添加一个别名正确的关于您的标签来创建一个虚拟主机文件中像这样

<VirtualHost *:80> 
    ServerName example.com 
    ServerAlias www.example.com 
    ServerAdmin [email protected] 
    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