2015-07-20 87 views
0

我想在我的Zend Framework 1應用程序中重定向url列表。現在,我可以添加所有數百重定向到這樣的htaccess文件:Zend框架重定向列表網址

Redirect 301 /old-page.html /new-page.html 

但我寧願想創建與所有重定向一個有組織的文件。這可能嗎?我閱讀了關於.ini文件的一些信息,但我想這不是我正在尋找的。

東西就像一箇舊的網址作爲鍵和新的網址值的數組也會很好。但是我對Zend Framework很陌生,所以也許有人可以幫助我呢?猜猜我需要創建一個PHP文件並將其加載到引導程序中,但我很努力。

編輯:

只是從我的頭頂,這樣的事情將是很好我想:

rewrites.php

$rewrites = array(
    '/old_url.html' => '/new_url.html' 
); 

if(array_key_exists(Zend_Controller_Front::getInstance()->getRequest()->getRequestUri(), $rewrites)){ 
    header("HTTP/1.1 301 Moved Permanently"); 
    header("Location: ".$rewrites[Zend_Controller_Front::getInstance()->getRequest()->getRequestUri()]); 
} 
+0

@ D4V1D並沒有真正嘗試的東西呢。不想破壞任何東西。我正在尋找一種以正確方式重定向的文件實現方式。因爲我無法找到Google的解決方案,所以我認爲在這裏提問是明智的。我剛剛編輯了我的答案,我創建了一個快速rewrites.php,現在我需要知道如何以正確的方式引導它。有什麼想法嗎?也許在Bootstrap.php裏面創建一個新的函數? –

+0

使用Apache和mod_rewrite,您可以使用['RewriteMap'](https://httpd.apache.org/docs/current/en/mod/mod_rewrite.html#rewritemap)指令。在這裏看到exeamples:https://httpd.apache.org/docs/current/en/rewrite/rewritemap.html有一個純文本地圖。 – Zimmi

+0

@Zimmi猜這是行不通的:''RewriteMap指令不能在部分或.htaccess文件中使用。您必須在服務器或虛擬主機上下文中聲明映射。你可以在你的RewriteRule和RewriteCond指令中使用地圖。你不能在這些範圍內聲明它。'''我沒有服務器訪問權限。 –

回答

1

你可能想要做什麼有寄存器一個插件。所述插件然後將檢查傳入的請求,並且如果滿足某些標準,則重定向請求。

庫/應用/控制器/插件/ RedirectHandler.php

<?php 

class App_Controller_Plugin_RedirectHandler 
    extends Zend_Controller_Plugin_Abstract 
{ 
    public function dispatchLoopStartup 
     (Zend_Controller_Request_Abstract $request) 
    { 
     // best to load this from somewhere, but we'll 
     // put it here for illustration purposes 
     $bindings = array(
      '/old_url.html' => '/new_url.html' 
     ); 

     $uri = $request->getRequestUri(); 

     if (isset($bindings[$uri])) { 
      $this->getResponse() 
       ->setRedirect($bindings[$uri], 301) 
       ->sendResponse(); 
      exit; 
     } 
    } 
} 

然後,我們需要確保在處理程序被調用。

應用/ bootstrap.php中

<?php 

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 
    // ... 

    protected function _initControllerPlugins() 
    { 
     Zend_Controller_Front::getInstance() 
      ->registerPlugin(new App_Controller_Plugin_RedirectHandler()); 
    } 
} 
+0

太棒了!謝謝。很棒。只需從RedirectHandler.php中刪除'''exit;'',使其返回一個空白頁面。 –

+1

@ErikVandeVen酷。對不起,我從記憶中寫下,忘記了回覆的迴應。我現在更新了它。 「退出」實際上很重要,否則請求仍會繼續。你需要的是' - > setRedirect(...)''後面的' - > sendResponse()'。 –

+0

好的,非常感謝!剛剛替換了$ bindings變量,以便加載包含所有重定向的json文件。很好用:'''$ bindings = json_decode(file_get_contents(APPLICATION_PATH。「/ configs/rewrites.json」),true);'''再次感謝您的幫助。 –