我會用你的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;
//[...]
您是否知道或有辦法瞭解所有受影響的網址? – Hannes 2010-12-01 14:41:50
是的,我將不得不創建一個所有舊網址的列表,以及它們將指向哪個地方。 (這會很無聊...:/) – AngelP 2010-12-01 14:46:25