Php Magento类别重定向会切断url的查询字符串

Php Magento类别重定向会切断url的查询字符串,php,.htaccess,magento,Php,.htaccess,Magento,我们正在运行一个带有google analytics的Magento 1.4.2.0网店。 众所周知,谷歌在url上附加了一个名为“gclid Param”的查询字符串 客户单击以下url: 类别“bathrooms”在magento内部被重命名,因此magento自动创建了一个从旧类别名称到新名称“bathrooms furniture”的重定向 所以现在我们有了一个问题,magento在重写和重定向url时会用glic参数切断查询字符串 是否有人知道如何防止这种情况发生,或者在哪个核心模块中

我们正在运行一个带有google analytics的Magento 1.4.2.0网店。 众所周知,谷歌在url上附加了一个名为“gclid Param”的查询字符串

客户单击以下url:

类别“bathrooms”在magento内部被重命名,因此magento自动创建了一个从旧类别名称到新名称“bathrooms furniture”的重定向

所以现在我们有了一个问题,magento在重写和重定向url时会用glic参数切断查询字符串

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

致意
马库斯

在对马根托的混乱进行了更深入的研究之后,我们找到了解决问题的方法

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

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

因此,我希望我们的解决方案能够帮助其他面临同样问题的人

致意
马库斯

在对马根托的混乱进行了更深入的研究之后,我们找到了解决问题的方法

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

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

因此,我希望我们的解决方案能够帮助其他面临同样问题的人

致意
Markus

在1.9.1.0中,这个问题可以通过在另一个类Mage\u Core\u Model\u Url\u Rewrite\u Request/function\u processRedirectOptions()中进行修补来解决。
只需在代码后添加

以下

$queryString=$this->\u getQueryString();
如果($queryString){
$targetUrl.='?'.$queryString;
}
并确保“如果”语句与

$this->\u sendRedirectHeaders($targetUrl,$ispermantRedirectOption);
}
我确信这已经足够了,因为您不需要为外部重定向传输查询字符串


快乐编码

在1.9.1.0中,这个问题可以通过在另一个类Mage\u Core\u Model\u Url\u Rewrite\u Request/function\u processRedirectOptions()中进行修补来解决。
只需在代码后添加

以下

$queryString=$this->\u getQueryString();
如果($queryString){
$targetUrl.='?'.$queryString;
}
并确保“如果”语句与

$this->\u sendRedirectHeaders($targetUrl,$ispermantRedirectOption);
}
我确信这已经足够了,因为您不需要为外部重定向传输查询字符串


快乐编码

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

  • 我已经在Magento根目录下有了一个目录,我用它来承载静态内容

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

  • 在“管理”页面中,转到“内容、配置”并编辑站点

  • 在html标题部分添加

  • 到脚本和样式表部分

  • 在同一页的页脚部分,添加
  • 转到杂项HTML部分

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

    试一试 { var urlParameters=/gclid=([^&]+)/.exec(document.location.toString()); if(urlParameters) { if(urlParameters[1]) { var siteLinks=document.getElementsByTagName(“a”); 对于(var currentLink=0;currentLink
  • 对于这个特定的修复,您不必添加startscripts.js文件,但是Google标记助手抱怨Google Analytics片段在head元素之外,因此我禁用了Magento Google Analytics实现,并将片段放入startscripts.js文件中


    我很想听听大家对用这种方法解决问题的看法。

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

  • 我已经在Magento根目录下有了一个目录,我用它来承载静态内容

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

  • 在t
    //$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;
    }
    
        $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) {