Добро пожаловать в Magento.StackExchange!
К сожалению, нет готового модуля, который сделает это за вас.
Я настоятельно рекомендую вам пересмотреть это как вариант. Ваши пользователи не глупы (независимо от того, насколько глупо они себя ведут) - многие, многие годы анализа электронной коммерции показали мне, что почти в 80% случаев пользователи, достигшие 404, будут попадать на панель поиска на сайте в течение нескольких секунд. Приложите усилия для улучшения поиска по сайту с помощью лучшей категоризации (читай: заполнение ключевыми словами).
Google индексы не вечны. Если вы боитесь 404-х, подумайте о том, чтобы улучшить свою страницу 404-го. Увеличьте свой потенциал конверсии, предложив купон на скидку 5-10% тем, кто испытывает неудобства, выбрав 404. Или, что еще лучше, не отключайте страницы продуктов. Скорее, отключите возможность покупки (например, установите как нет в наличии) и предоставьте статический блок / ссылку, которая ссылается на соответствующую страницу / категорию.
Мне все равно, просто дайте мне коды, потому что интернет:
В самом простом коде модуль с наблюдателем, который будет обрабатывать это для вас, тривиален:
Обозначение события в config.xml:
<global>
<events>
<controller_action_postdispatch_catalog_product_view>
<observers>
<yourmodule_capcpv>
<class>YourCompany_YourModule_Model_Observer</class>
<method>catalogProductViewPostdispatch</method>
</yourmodule_capcpv>
</observers>
</controller_action_postdispatch_catalog_product_view>
</events>
</global>
Приложение / код / местные / YourCompany / YourModule / Модель / Observer.php:
<?php
class YourCompany_YourModule_Model_Observer
{
public function catalogProductViewPostdispatch($observer)
{
$controller = $observer->getEvent()->getControllerAction();
$product = Mage::registry('current_product');
if($product->getStatus()!=Mage_Catalog_Model_Product_Status::STATUS_ENABLED){
$action->getResponse()->setRedirect(/* your redirect URL here with Mage::getUrl() */);
}
}
}