2011-11-30 31 views
2

我用這個撞牆了...在子目錄中的Zend Framework

我需要在子目錄內建立一個zend框架應用程序。

即域是tricell.ss和我想使用tricell.ss /三電池作爲應用程序的主目錄。

Whate've完成:

  1. 我在我的配置設置好的了(的application.ini)中:

    resources.frontController.baseUrl = "/tricell" 
    
  2. 我在我的配置做出另一個變種

    baseUrl = "/tricell" 
    
  3. 在我的Boostrap我有這個:

    $router  = new Zend_Controller_Router_Rewrite(); 
    $frontController->setRouter($router); 
    $frontController->setBaseUrl($this->config->baseUrl);   
    
    $frontController->dispatch(); 
    
  4. 在我的佈局,我想用顯示圖像:

    $this->baseUrl('/img/btn.png') 
    
  5. 這裏是我的虛擬主機配置:

    <VirtualHost *:80> 
    DocumentRoot "/HTDOCS/tricell/tricell/public_html" 
    ServerName tricell.ss 
    RewriteRule ^$ [L] 
    
    RewriteEngine On 
    RewriteCond %{HTTP_HOST} ^(www.)?tricell.ss$ 
    RewriteRule ^(/)?$ tricell [L] 
    </VirtualHost> 
    
  6. 這裏是我的.htaccess:

SETENV APPLICATION_ENV發展

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

問題是當我試圖顯示圖像什麼也沒有發生。當我試圖通過URL來獲取圖像:

http://tricell.ss//tricell/img/btn.png

我收到有關錯誤信息控制器。我如何才能做到這一點?我可以(沒有任何問題)像tricell.ss那樣爲根域進行配置,然後獲取圖像,例如tricell/ss/img/btn.png,但是我想在子目錄上工作,而且我無法在圖像上執行此操作。我在這裏做錯了什麼?

回答

1

我剛剛設法解決我的問題......這很簡單,但我很困惑所有這些重寫規則。

正如我們所說的那樣,tricell總是讓人困惑,讓我們對此做一些改變。 所以才達到類似tricell.ss /分,我需要:

  1. 把我的整個應用程序內/ HTDOCS /三電池/三電池/子
  2. 從該行更改我的虛擬主機:DocumentRoot的「/ HTDOCS /三電池/三電池/的public_html」來:的DocumentRoot 「/ HTDOCS /三電池/三電池/」
  3. 插入我的/ HTDOCS /三電池/三電池/子目錄又一個的.htaccess:

    RewriteEngine敘述在

重寫規則^ htaccess的$ - [F]

的RewriteCond%{REQUEST_URI} = 「」 重寫規則^ * $ /sub/ublic_html/index.php [NC,L]

的RewriteCond%{ REQUEST_URI}!^/sub/public_html /。 ()$ 重寫規則^ $ /分/的public_html/$ 1

的RewriteCond%{REQUEST_FILENAME} -f 重寫規則^ * $ - [NC,L]

重寫規則^的public_html /.*$ /sub/public_html/index.php [NC,L]

這解決了我所有的問題。

1

我覺得你可以做的就是這個工作的最簡單的事情是這樣的:

開始用新的ZF項目,或刪除所有的Zend路線,並在.htaccess任何特殊配置或httpd.conf文件/你創建的httpd-vhosts.conf。

擺脫你在你的配置文件中設置的選項的baseUrl。

將index.php文件,並在您/HTDOCS/tricell/tricell/public_html/tricell文件夾中的.htaccess文件。

廣場項目(控制器,型號,配置等)的Web根以外的其餘部分。在這個例子中,我將假設他們被放置在/HTDOCS/tricell/tricell/zfproject

編輯索引。PHP和變化:

defined('APPLICATION_PATH') 
    || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application')); 

// to: 

defined('APPLICATION_PATH') 
    || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../../zfproject/application')); 

現在,您的應用程序將使用的基本目錄是yoursite.com/tricell運行

IndexController.php的URL將是http://yoursite.com/tricell/index

你不需要做任何事特別告訴Zend你的基地址是「tricell」。只要確保在你的視圖腳本中爲你的路徑使用$this->baseUrl(),所以你不需要擔心手動添加/ tricell到所有東西的開始,如果你將項目移動到另一個目錄/路徑,則不需要改變處理新的道路。

+0

如果我沒有更改任何虛擬主機,我想我需要在public_html中添加一個.htaccess,如果我錯了,請糾正我。不幸的是你的解決方案不起作用。輸入時有404個屏幕:domain.local/tricell/index – Ertai

+0

您不必在public_html中有任何特殊的.htaccess文件,只需在public_html/tricell中使用Zend Framework .htaccess和index.php。你也應該把你的資源,如圖像和CSS在public_html/tricell也。我們用index.php改變的一個事實是,核心應用程序並沒有在公共目錄中居高一級。在這種情況下,它在它自己的文件夾中有兩層。我能夠讓這個設置在我的網站上工作,只需要改變index.php,它定義了APPLICATION_PATH。讓我知道如何去NM – drew010

+0

,我看你現在工作。 – drew010