Перенаправление с URL-адресов с помощью строк запроса

magento.stackexchange https://magento.stackexchange.com//questions/67130

  •  12-12-2019
  •  | 
  •  

Вопрос

У моего старого сайта было десятки тысяч продуктов без более низких классов с такими URL-адресами http://example.com?product_id=123456.

Все они проиндексированы поисковыми системами и теперь разрешаются до 404 в Magento.Я не могу создать перенаправление для каждого из них.

Как мне заставить их перейти на мою домашнюю страницу?

Это было полезно?

Решение

В этом случае вы можете использовать событие/наблюдатель и на мероприятии controller_front_init_before уволить наблюдателя.

Сначала я думаю, что ваш старый идентификатор продукта и новый идентификатор продукта совпадают.

На том observer check query string($_SERVER['QUERY_STRING']) content

?product_id=идентификатор продукта шаблон in url тогда основное из этого redirect to current system product url.

Пример:

Предполагать,

URL-адрес продукта старой системы: http://example.com?product_id=123456

URL-адрес нового системного продукта: http://example.com/abx.html

мой код будет перенаправлен http://example.com?product_id=123456 к http://example.com/abx.html используя 301 перенаправление.

301 редирект, вы решите проблему с SEO.

Вот код config.xml:

 <global>
    <models>
      <magento67130>
        <class>StackExchange_Magento67130_Model</class>
        <resourceModel>magento67130_mysql4</resourceModel>
      </magento67130>
    </models>
    <events>
      <controller_front_init_routers> <!-- identifier of the event we want to catch -->
        <observers>
          <controller_front_init_before_handler> <!-- identifier of the event handler -->
            <type>model</type> <!-- class method call type; valid are model, object and singleton -->
            <class>magento67130/observer</class> <!-- observers class alias -->
            <method>redirectionProduct</method>  <!-- observer's method to be called -->
          </controller_front_init_before_handler>
        </observers>
      </controller_front_init_routers>
    </events>
  </global>

Код Observer.php приведен ниже:

<?php
class StackExchange_Magento67130_Model_Observer
{

    public function redirectionProduct(Varien_Event_Observer $observer)
    {
        return;
        if($this->_getQueryString()){
            print_r($this->_getQueryString());

                // Check query string exits in product_id
            if(strpos($this->_getQueryString(),'product_id=')!== false){
                /* get Product ifd from query string */
                 $productid=str_replace('product_id=','',$this->_getQueryString());
                if(!empty($productid)):
                $product= Mage::getModel('catalog/product')->load($productid);
                 if ($product->getId()) {
                    echo $product->getProductUrl();
                     Mage::app()->getResponse()
                        ->setRedirect($product->getProductUrl(), 301)
                             ->sendResponse();

                             return;
                 }
                endif;
            }

        }
        //die();

    }
    /* Check here Request query string */
    protected function _getQueryString()
        {
            if (!empty($_SERVER['QUERY_STRING'])) {
                $queryParams = array();
                parse_str($_SERVER['QUERY_STRING'], $queryParams);
                $hasChanges = false;
                foreach ($queryParams as $key => $value) {
                    if (substr($key, 0, 3) === '___') {
                        unset($queryParams[$key]);
                        $hasChanges = true;
                    }
                }
                if ($hasChanges) {
                    return http_build_query($queryParams);
                } else {
                    return $_SERVER['QUERY_STRING'];
                }
            }
            return false;
        }
}

Другие советы

you have to create one little custom extension to redirect if product is not found in your database

here i have given working solution and its perfect worked for me

How to forward all the 404 Magento pages to the front page?

hope this will also work for you.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top