2012-03-21 19 views
4

我已經在子目錄中設置了Zend應用程序。不要問爲什麼我只是這樣做(不是我喜歡的方法),但我沒有這個選擇。 Zend應用程序駐留在一個名爲dsa的子目錄中。Zend應用程序從子目錄中獲取Zend佈局鏈接正常工作

http://dsa.dev/dsa 

我的.htaccess

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

這工作,將引導應用程序。我可以去我的根目錄和其他目錄,其他的東西沒有任何問題。

在我的application.ini我已經設置

resources.frontController.baseUrl = "/dsa". 

在我layout.phtml文件,如果我的var_dump它看起來像這樣的路徑。

var_dump($this->baseUrl('css/main.css')); 
http://dsa.dev/dsa/css/main.css 

沒有鏈接工作,所有的CSS和JS文件都沒有正確鏈接。如果你點擊F12並查看它們,你會得到一個沒有找到任何文件的404。我需要做些什麼來獲得正確的路徑來顯示文件。這是我第一次嘗試在子目錄中設置zend,顯然我沒有做正確的事情。我已閱讀了關於此主題的所有內容。謝謝您的幫助。

回答

6

我看到的至少有一個問題是.htaccess文件中的重寫規則不正確。

鑑於這些規則:

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

這些規則等同於:

RewriteCond %{REQUEST_FILENAME} -s [OR]#該請求是與尺寸的常規文件> 0 RewriteCond %{REQUEST_FILENAME} -l [OR]#的請求是一個文件,該文件是一個符號鏈接 RewriteCond %{REQUEST_FILENAME} -d [OR]#請求是存在的目錄

如果上述任何一個都是真的,請求被重寫爲public/index.php w這是不正確的。如果請求是針對磁盤上存在的文件的,則不需要重寫它;相反,你只是想提供該文件。

正確.htaccess文件應該是這個樣子:

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

這是說,如果該請求是與大小> 0,目錄或符號鏈接文件,然後將請求路由到實際請求的文件(RewriteRule ^.*$ -)。如果這些條件都不成立,則將請求重寫爲index.php。

在另一個筆記,我會繼續前進,擺脫public目錄。取public的內容,並將它們放入/dsadsa現在是您的public文件夾。您可以將application目錄存儲在系統的任何位置,或者由於文件系統限制而必須將其放入dsa文件夾中,請確保向.htaccess文件添加一條規則,該規則拒絕對application文件夾的所有訪問。然後,您只需要快速更改index.php文件,並使用APPLICATION_PATH常數告訴其application的正確路徑。

我相信這兩個更改應該可以解決您的問題。

+0

創建一個虛假帳戶是否是錯誤的,所以我可以兩次投票贊成這個?很好的答案! – Phil 2012-03-22 00:00:49

+0

@菲爾也許,但沒有人反對我;)jk。感謝評論/ – drew010 2012-03-22 00:11:18

+1

感謝這篇文章,它非常好,直截了當。我正在研究並提出你的建議。 – lumberjacked 2012-03-22 14:43:42

0

嘗試在您的.htaccess中設置一個RewriteBase /dsa

+0

已經嘗試過所有這些,但沒有看到它被處理的方式有任何區別。 – lumberjacked 2012-03-22 14:43:09