2009-05-23 29 views
3

的情況在Zend框架中,使用MVC,如果用戶明確衝浪到http://base/url/index.php而不是僅僅衝浪http://base/url,系統認爲真實的基地址是http://base/url/index.php/,並根據這個計算出所有系統中的網址。如何解決用戶衝浪到index.php

所以,如果我有一個控制器XXX和行動YYY鏈接將是
http://base/url/index.php/XXX/YYY這當然是錯誤的。

我目前通過的index.php添加一行解決這個:

$_SERVER["REQUEST_URI"]=str_replace('index.php','',$_SERVER["REQUEST_URI"]); 

我想知道如果在ZF內置的方式來解決這個問題。

回答

5

您可以通過使用ZF做Zend_Controller_Router_Route_Static(唷!),例如:

閱讀手冊頁上面鏈接中,有被發現一些不錯的例子。

$route = new Zend_Controller_Router_Route_Static(
    'index.php', 
    array('controller' => 'index', 'action' => 'index') 
); 
$router->addRoute('index', $route); 

不能說我完全不同意你的方法。也就是說,其他人可能會指出5000多個缺點。祝你好運。

2

那這真的取決於你想如何解決這個問題。如您所知,Zend框架基於前端控制器模式構建,其中沒有明確引用/ public目錄中的文件的每個請求都被重定向到index.php。所以,你可以從根本上解決這個在許多方面:

  1. 編輯.htaccess文件(或服務器配置指令)改寫請求所需的要求:
    • 重寫規則(*的index.php )/ error/forbidden?req = $ 1 //重寫爲錯誤控制器的禁止操作。
    • 重寫規則的index.php /指數//重寫請求到主控制器和行動
  2. 在你的引導程序添加靜態路由通過karim79的建議。
0

我不認爲你應該使用路線來做到這一點。

這是一種普遍的問題,不應該通過這種方式解決。

你最好應該在你的.htaccess中這樣做,它會爲你提供更好的方法來將用戶重定向到你想要的位置,比如錯誤頁面或索引。

下面是mod_rewrite

0

我從未遇到過使用Zend Framework這個問題的文檔頁面。只是不要鏈接到index.php文件。而已。當你是給你的應用程序的地址給用戶,告訴他們去http://base/url/

當用戶進入http://base/url/她的請求URI是基地/ URL和.htaccess文件擊潰請求指數。PHP,但請求IS基地/網址。你不需要從請求中刪除'index.php'。因爲它不在那裏。

當您嘗試爲鏈接和表單生成URL時...使用內置的url()視圖助手來生成鏈接。像這樣:

// in some view script 
<a href="<?php 
    echo $this->url(array('controller'=>'targetController','action'=>'targetAction')); 
     ?>" >click</a> 

不用擔心鏈接。 Zend會爲你生成一個URL。

+0

你是1000%是正確的,問題是,我發現,用戶傾向於有時將index.php添加到URL。這就是我對這個問題的瞭解。 – 2009-05-23 21:51:08

0

我看這個問題的方法是,如果我有一個網站支持PHP和用戶去http://site/index.aspx話,我會即使它的index.php在理論上存在發送404

,它不是一個在我的應用程序中有效的URL,所以我也會在這種情況下發送一個404。

+1

將他重定向到真實的URL會不會更友好? – 2009-07-22 19:28:46

2

使用mod_rewrite。像這樣的事情應該這樣做:

RewriteRule ^index.php/(.*)$ /$1 [r=301,L]