繁体   English   中英

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

[英]Magento category redirect cuts off the querystring of an url

我们正在运行带有Google Analytics(分析)的Magento 1.4.2.0网络商店。 众所周知,google在网址上附加了一个名为“ gclid-Param”的查询字符串。

客户单击以下URL: http : //www.myshop.com/bathrooms/showersbaths.html? glicd= somevalue

在magento内部将“浴室”类别重命名,因此magento自动创建了一个从旧类别名称到新名称“浴室家具”的重定向。

因此,现在我们有了一个问题,即magento在重写和重定向URL时使用glic-param切断了查询字符串。

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

最好的问候马库斯

在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);
    }

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

快乐编码

在对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.1.0社区版,并且遇到相同的问题。 我尝试找到上面的文件,但它们似乎特定于Magento的1.X版本(至少是文件内的实现)。 我为此找到了解决方法,但我讨厌讨厌这样做。 话虽如此,我没有注意到该网站的任何性能问题,也不必修改任何Magento核心文件。 所以...这就是我所做的;

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

  2. 我在此目录中创建了两个文件:startscripts.js(用于在head元素中加载任何自定义脚本)和endscripts.js(用于在body元素结尾之前用于加载任何自定义脚本)。

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

  4. 在html head部分中添加

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

到脚本和样式表部分

  1. 在同一页面的页脚部分中,添加

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

到“其他HTML”部分

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

    尝试{var urlParameters = / gclid =([[^&] +)/。exec(document.location.toString()); if(urlParameters){if(urlParameters [1]){var siteLinks = document.getElementsByTagName(“ a”); for(var currentLink = 0; currentLink <siteLinks.length; currentLink ++){if(siteLinks [currentLink] .href.toString()。indexOf(“ gclid”)<0){if(siteLinks [currentLink] .href.toString( ).indexOf(“?”)<0){siteLinks [currentLink] .href = siteLinks [currentLink] .href +“?gclid =” + urlParameters [1]; } else {siteLinks [currentLink] .href = siteLinks [currentLink] .href +“&gclid =” + urlParameters [1]; }}}}}} catch(e){}

对于此特定的修复程序,您不必添加startscripts.js文件,但是Google标记助手抱怨说Google Analytics(分析)代码段不在head元素之外,因此我禁用了Magento Google Analytics(分析)实施并将其放入了startscripts.js文件。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM