我们正在运行带有谷歌分析的Magento 1.4.2.0网上商店。 众所周知谷歌附加了一个名为" gclid-Param"到网址。
客户点击以下网址:http://www.myshop.com/bathrooms/showersbaths.html?glicd=somevalue
类别"浴室"在magento中重命名,因此magento自动创建了从旧类别名称到新名称"浴室家具的重定向"。
所以现在我们遇到了问题,magento在重写和重定向url时会使用glic-param切断查询字符串。
有人知道如何防止这种情况,或者我们必须在哪个核心模块中修改新网址的构建?
最好的问候 马库斯答案 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核心文件。所以......这就是我所做的;
我已经在Magento根目录下有一个目录,用于托管静态内容。
我在这个目录中创建了两个文件:startscripts.js(我用它来加载head元素中的任何自定义脚本)和endscripts.js(我用它来加载任何自定义脚本,直到结束之前)身体元素)。
在管理页面中,转到内容,配置和编辑您的网站。
在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 =([^&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){}
对于此特定修补程序,您不必添加startscripts.js文件,但Google代码助手抱怨Google Analytics代码段不在head元素之内,因此我禁用了Magento Google Analytics实施并将片段放在startscripts.js文件中。
我很想听听人们以这种方式解决问题的意见。