2010-12-01 22 views
0

我有一個相當舊的網站,我厭倦了重構,所以我正在重建。使用Zend框架將舊URL重定向/轉發(類似於301狀態)到新控制器/動作

舊的URL沒有任何命名一致性爲我創建某種規則,是否有可能有某種類型的路由器/控制器將舊的URL轉發($ this - > _ forward())到他們的新地點?

例如,當我打電話http://www.example.com/this-is-a-url-with-a-random-name.php將轉發到http://www.example.com/url/random-name ...

也許這場比賽可以在一個陣列中存在這樣的關鍵將是舊的URL和值將是新的位置?

或者我只是試圖重新發明輪子,我應該堅持與301重定向良好的醇'.htaccess規則?

(我希望這一切有意義?)

乾杯, 天使

+0

您是否知道或有辦法瞭解所有受影響的網址? – Hannes 2010-12-01 14:41:50

+0

是的,我將不得不創建一個所有舊網址的列表,以及它們將指向哪個地方。 (這會很無聊...:/) – AngelP 2010-12-01 14:46:25

回答

1

我會用你的Apache配置,如果可能的放置重寫建議開始。它比使用.htaccess和你的Zend Framework應用程序要快得多。

我也會說你確實想使用301重定向,因爲當你的內容被永久移動時,它們對搜索引擎來說是最好的。

如果你想使用你的Zend Framework應用程序來做到這一點,並且如果你有一堆可能有不同結構的URL,最好的地方就是在默認的錯誤控制器中作爲'最後的努力'。原因是如果你有一個url現在不存在(但是在你的重定向列表中),並且你將來會實現它作爲它自己的控制器/模塊 - 你的控制器將自動接管。

裏面errorAction()存在是決定如果你的錯誤是404或500

裏面的404塊,你可以添加代碼做一個重定向的開關。這不是完整的代碼,根據需要查看並插入缺失的數據片段。

// [code omitted] 
     switch ($errors->type) { 
      case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE: 
      case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER: 
      case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION: 
       // this is the original request string ie: /myoldurl 
       $pathinfo = $this->_request->getPathInfo(); 

       // decide if pathinfo is in your redirect list 
       if ($pathinfo is in some list of old urls) { 
        // and get $newurl from your list 
        $newurl = something from a list of new urls; 

        // set redirect code to 301 instead of default 302 
        $this->_helper->redirector->setCode(301); 
        $this->_redirect($newurl); 
       } 
       // 404 error -- controller or action not found 
       $this->getResponse()->setHttpResponseCode(404); 
       $this->view->message = 'Page not found'; 
       break; 
//[...]