Magento类别重定向切断了网址的查询字符串

时间:2014-10-29 11:56:33

标签: php .htaccess magento

我们正在运行带有谷歌分析的Magento 1.4.2.0网上商店。 众所周知谷歌附加了一个名为" gclid-Param"到网址。

客户点击以下网址:http://www.myshop.com/bathrooms/showersbaths.html?glicd=somevalue

类别"浴室"在magento中重命名,因此magento自动创建了从旧类别名称到新名称"浴室家具的重定向"。

所以现在我们遇到了问题,magento在重写和重定向url时会使用glic-param切断查询字符串。

有人知道如何防止这种情况,或者我们必须在哪个核心模块中修改新网址的构建?

最好的问候 马库斯

3 个答案:

答案 0 :(得分:6)

在1.9.1.0中,这个问题可以通过修补另一个类Mage_Core_Model_Url_Rewrite_Request / function _processRedirectOptions()来解决。
只需在代码后添加

    $targetUrl = $this->_request->getBaseUrl() . '/' . $this->_rewrite->getTargetPath();

    $storeCode = $this->_app->getStore()->getCode();
    if (Mage::getStoreConfig('web/url/use_store') && !empty($storeCode)) {
        $targetUrl = $this->_request->getBaseUrl() . '/' . $storeCode . '/' . $this->_rewrite->getTargetPath();
    }

    if ($this->_rewrite->hasOption('R') || $isPermanentRedirectOption) {

以下

            $queryString = $this->_getQueryString();
            if ($queryString) {
                $targetUrl .= '?'.$queryString;
            }

并确保'if'语句保持关闭状态

           $this->_sendRedirectHeaders($targetUrl, $isPermanentRedirectOption);
    }

我确信它已经足够了,因为您不需要为外部重定向传输查询字符串。

快乐编码

答案 1 :(得分:0)

经过对magento混乱的深入研究,我们找到了解决问题的解决方案。

在Mage_Core的Url-Model中存在一个类rewrite.php。 我们创建了一个自定义模型并覆盖了rewrite.php。

在函数rewrite()内部,我们添加了以下代码(标记为注释):

//$url_params = false;
//if ($url_params = $_SERVER['QUERY_STRING'])
//$url_params = "?".$url_params;

if ($external === 'http:/' || $external === 'https:') 
{
    if ($isPermanentRedirectOption) 
    {
        header('HTTP/1.1 301 Moved Permanently');
    }

    header("Location: ".$this->getTargetPath() //.$url_params);
    exit;
} 
else 
{
    $targetUrl = $request->getBaseUrl(). '/' . $this->getTargetPath();
}
$isRedirectOption = $this->hasOption('R');
if ($isRedirectOption || $isPermanentRedirectOption)
{
    if (Mage::getStoreConfig('web/url/use_store') && $storeCode =    
    Mage::app()->getStore()->getCode()) 
    {
        $targetUrl = $request->getBaseUrl(). '/' . $storeCode . '/'  
        .$this->getTargetPath();
    }
    if ($isPermanentRedirectOption)
    {
         header('HTTP/1.1 301 Moved Permanently');
    }
    header('Location: '.$targetUrl //.$url_params);
    exit;
}

所以我希望我们的解决方案可以帮助那些面临同样问题的人。

祝你好运 马库斯

答案 2 :(得分:0)

我现在正在运行2.1.0社区版,我遇到了同样的问题。我尝试找到上面的文件,但它们似乎特定于Magento的1.X版本(至少是文件中的实现)。我找到了解决这个问题的方法,但我讨厌讨厌我这样做的方式。话虽这么说,我没有注意到网站的任何性能问题,我没有必要修改任何Magento核心文件。所以......这就是我所做的;

  1. 我已经在Magento根目录下有一个目录,用于托管静态内容。

  2. 我在这个目录中创建了两个文件:startscripts.js(我用它来加载head元素中的任何自定义脚本)和endscripts.js(我用它来加载任何自定义脚本,直到结束之前)身体元素)。

  3. 在管理页面中,转到内容,配置和编辑您的网站。

  4. 在html head部分添加

    <script src="/[staticDirectoryYouCreate]/startscripts.js" type="text/javascript"></script>

  5. 到脚本和样式表部分

    1. 在同一页面的页脚部分,添加
    2. <script src="/[staticDirectoryYouCreate]/endscripts.js" type="text/javascript" defer></script>

      到杂项HTML部分

      1. 这是我在endscripts.js文件中创建的脚本,用于将gclid附加到页面上的链接:

        试 { var urlParameters = / gclid =([^&amp;] +)/。exec(document.location.toString()); 如果(urlParameters) {   如果(urlParameters [1])   {     var siteLinks = document.getElementsByTagName(&#34; a&#34;);     for(var currentLink = 0; currentLink&lt; siteLinks.length; currentLink ++)     {       if(siteLinks [currentLink] .href.toString()。indexOf(&#34; gclid&#34;)&lt; 0)       {         if(siteLinks [currentLink] .href.toString()。indexOf(&#34;?&#34;)&lt; 0)         {           附加链接[currentLink] .href =附加链接[currentLink] .href +&#34; GCLID =&#34 + urlParameters [1];         }         其他         {           附加链接[currentLink] .href =附加链接[currentLink] .href +&#34;&安培; GCLID =&#34 + urlParameters [1];         }       }     }   } } } 捕捉(E){}

      2. 对于此特定修补程序,您不必添加startscripts.js文件,但Google代码助手抱怨Google Analytics代码段不在head元素之内,因此我禁用了Magento Google Analytics实施并将片段放在startscripts.js文件中。

        我很想听听人们以这种方式解决问题的意见。