إعادة توجيه من عناوين المواقع مع سلاسل الاستعلام

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

  •  12-12-2019
  •  | 
  •  

سؤال

كان موقعي القديم يحتوي على عشرات الآلاف من المنتجات التي لم تعد صالحة عناوين مثل http://example.com?product_id=123456.

انهم جميعا محرك البحث فهرستها والآن حل ل 404 في الماجنتو.لا يمكنني إنشاء إعادة توجيه لكل واحد.

كيف يمكنني حملهم على حل صفحتي الرئيسية?

هل كانت مفيدة؟

المحلول

في هذه الحالة ، يمكنك استخدام الحدث / المراقب وفي الحدث controller_front_init_before أطلق النار على مراقب.

أولا أعتقد أن معرف المنتج القديم ومعرف المنتج الجديد متماثلان.

على ذلك observer check query string(ERVER _الخادم ['الاستعلام عن_سلسلة']) content

?معرف المنتج=معرف المنتج نمط in url ثم الأساسية من هذا redirect to current system product url.

مثال:

افترض,

عنوان المنتج النظام القديم: http://example.com?product_id=123456

رابط منتج النظام الجديد: http://example.com/abx.html

سيتم إعادة توجيه الكود الخاص بي http://example.com?product_id=123456 إلى http://example.com/abx.html باستخدام 301 إعادة توجيه.

301 إعادة توجيه, سوف تحل قضية كبار المسئولين الاقتصاديين.

هنا التكوين.رمز شمل:

 <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>

مراقب.رمز فب أدناه:

<?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;
        }
}

نصائح أخرى

يجب عليك إنشاء ملحق مخصص صغير لإعادة التوجيه إذا لم يتم العثور على المنتج في قاعدة البيانات الخاصة بك

هنا لقد أعطيت حل العمل ومثالي عملت بالنسبة لي

كيفية إعادة توجيه جميع 404 صفحات الماجنتو إلى الصفحة الأولى?

نأمل أن يكون هذا العمل أيضا بالنسبة لك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى magento.stackexchange
scroll top