[英]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核心文件。 所以...这就是我所做的;
我已经在Magento根目录下有一个用于托管静态内容的目录。
我在此目录中创建了两个文件:startscripts.js(用于在head元素中加载任何自定义脚本)和endscripts.js(用于在body元素结尾之前用于加载任何自定义脚本)。
在管理页面中,转到内容,配置并编辑您的站点。
在html head部分中添加
<script src="/[staticDirectoryYouCreate]/startscripts.js" type="text/javascript"></script>
到脚本和样式表部分
<script src="/[staticDirectoryYouCreate]/endscripts.js" type="text/javascript" defer></script>
到“其他HTML”部分
这是我在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.