2010-08-24 85 views
0

我建立了一個Zend應用程序,並完成了在我的開發工作站上設置modrewrite和編寫.htaccess文件(如下所示)的基本步驟。現在,當我轉到項目的根目錄時,Zend正常工作,調用控制器並顯示相應的頁面。但是,當我調用任何控制器時,我會希望它重定向到相同的index.php文件,這會反過來將它指向適當的控制器和動作(例如,myurl/controller/action將被myurl讀取/index.php然後重定向到適當的動作)。Zend和modrewrite不能正常工作

我懷疑這個問題在某種程度上與我設置我的.htaccess文件有關,因爲調用基本網址確實可以正常工作。但我一直無法弄清楚什麼是錯的。有沒有人有建議?

Options +FollowSymLinks 
RewriteEngine On 

RewriteBase/

RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 

RewriteRule ^.*$ - [NC,L] 
RewriteRule ^(.*)/(.*)$ index.php [NC,L] 
RewriteRule ^(.*)/(.*)/(.*)$ index.php [NC,L] 
RewriteRule ^(.*)/(.*)/(.*)/(.*)$ index.php [NC,L] 
RewriteRule ^.*$ index.php [NC,L] 
+0

取而代之的是什麼?你是否指向'ErrorController'索引操作,或? – 2010-08-24 15:03:17

+0

不,我收到404錯誤。具體而言,「在此服務器上未找到請求的URL /index.php」。 – Elie 2010-08-24 15:07:47

+1

哦......這很奇怪。該應用程序是在'DOCUMENT_ROOT'還是一個子目錄? – 2010-08-24 15:40:52

回答

1

好的,這是它是什麼。

我的DOCUMENT_ROOT被設置爲/ var/www,而我的應用程序用完了/ var/www/app1,其中的所有內容都已設置。由於行RewriteBase /它被重定向到DOCUMENT_ROOT而不是APPLICATION_ROOT。我通過將該行更改爲:

RewriteBase /app1 

現在一切正常。

+1

(對不起,去吃午飯,然後開會)啊,當然是'RewriteBase'。 [module documentation](http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritebase)表明在大多數情況下都是必須的,但這通常是不真實的(事情應該也能正常運行如果你完全忽略它),所以我覺得有點誤導。無論如何,好趕上,+1 – 2010-08-24 19:48:48

+0

謝謝!您對DOCUMENT_ROOT的評論讓我想起了這一點,因爲我有幾個站點運行了我的單個Apache服務器,但是現在只有這個站點正在使用modrewrite。 – Elie 2010-08-25 12:52:16

+0

我誤以爲DocumentRoot應該設置爲/ var/www/app1/public? – Herbert 2012-06-01 20:12:17