2011-04-11 146 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