2010-05-07 87 views
1

我正在使用Zend路由器,所以像(/和/index.php)或(/ about和/index.php/about)這樣的結果就像這裏一樣。如何避免Zend Framework中的index.php?

但是,/index.php/whatever不應該存在,因爲它是完全相同的資源/無論如何它沒有意義的重複。

我該如何避免這種情況?

即使http://zendframework.com/manual/en/zend.controller.router.htmlhttp://zendframework.com/index.php/manual/en/zend.controller.router.html都存在。它根本沒有任何意義...

回答

0

1)不要鏈接到它(像你的問題中的網址),並讓它成爲一個隱藏的功能。基本上,這並不重要。

2)添加一個rewrite-rule從包含它的任何請求中去除/index.php。您必須確保將其轉發到index.php,以便您仍可以處理它,並且您可能需要發送status code beginning with 3

+0

不連接是怎麼樣的一個變通(和我只是做'現在)。如果你使用Zend Router url助手來創建內部鏈接(真的很有用),考慮到它可能只需要一個隨機用戶將index.php附加到某個地方的鏈接(無論出於何種原因),並且你可能會浪費Web爬蟲的資源(甚至如果你使用你在(2)中所說的重定向)。 – 2010-05-09 15:45:58

+0

@henriquev:重寫請求應該在服務器級別上,而不是通過Zend路由器來浪費最少的資源。這就是每個ZF應用程序使用標準重寫的方法,如果您爲這種情況添加了一個規則(/index.php.*),則不會有太大影響。我想你需要對你的應用進行基準測試,看它是否會對你產生影響。通過正確的重定向標題,您的搜索引擎優化也不會被切斷。也就是說,如果用戶甚至關心足夠修改鏈接。我認爲這個問題確實不是問題。 – chelmertz 2010-05-09 15:59:15

0

似乎您的mod_rewrite配置不正確(在Apache中啓用mod_rewrite?是.htaccess configured properly?)。如果是這樣,你根本不必輸入index.php

編輯:

RewriteEngine On 

RewriteCond %{REQUEST_URI} ^index.php [OR] 

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

他沒有*鍵入index.php,但他注意到當他*手動鍵入*'index.php'時,它會導致相同的頁面。 – chelmertz 2010-05-08 07:34:46

+0

mod_rewrite已啓用並正在使用中。正如我所說的,我可以輸入或不輸入index.php。 那麼,我的重寫規則呢? 他們檢查該路徑是否有文件,如果不是,則重定向到index.php。 所以,當有一個/index.php當然不會重定向,但只是加載index.php無論如何。但是如果有像/index.php/help這樣的東西,它會以/ help的形式工作。那意味着什麼?問題/解決方案在於PHP方面,更確切地說:它是Zend路由器中的一些東西(比如它沒有使用完整路徑,而是它的一個子集)。 – 2010-05-09 15:51:14

+0

我已經添加了示例代碼*未經測試*我的答案。 – takeshin 2010-05-09 17:02:04