diff --git a/classes/Dispatcher.php b/classes/Dispatcher.php
index a391eb37a..ba81cd3cd 100644
--- a/classes/Dispatcher.php
+++ b/classes/Dispatcher.php
@@ -325,7 +325,7 @@ class DispatcherCore
if (!isset($this->routes[$routeID]))
{
$query = http_build_query($params);
- return ($routeID == 'index') ? 'index.php'.(($query) ? '?'.$query : '') : 'index.php?controller='.$routeID.(($query) ? '&'.$query : '');
+ return ($routeID == 'index') ? 'index.php'.(($query) ? '?'.$query : '') : 'index.php?controller='.$routeID.(($query) ? '&'.$query : '');
}
$route = $this->routes[$routeID];
@@ -360,7 +360,7 @@ class DispatcherCore
}
// Build a classic url index.php?controller=foo&...
else
- $url = 'index.php?controller='.$route['controller'].(($queryParams) ? '&'.http_build_query($queryParams) : '');
+ $url = 'index.php?controller='.$route['controller'].(($queryParams) ? '&'.http_build_query($queryParams) : '');
return $url;
}
diff --git a/classes/FrontController.php b/classes/FrontController.php
index 1859275a1..5d6224c47 100755
--- a/classes/FrontController.php
+++ b/classes/FrontController.php
@@ -383,7 +383,7 @@ class FrontControllerCore
{
// $_SERVER['HTTP_HOST'] must be replaced by the real canonical domain
- $canonicalURL = $this->context->link->getPageLink($this->php_self, $this->ssl, $this->context->language->id);
+ $canonicalURL = str_replace('&', '&', $this->context->link->getPageLink($this->php_self, $this->ssl, $this->context->language->id));
if (!Tools::getValue('ajax') && !preg_match('/^'.Tools::pRegexp($canonicalURL, '/').'([&?].*)?$/', (($this->ssl AND Configuration::get('PS_SSL_ENABLED')) ? 'https://' : 'http://').$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']))
{
header('HTTP/1.0 301 Moved');
diff --git a/classes/Link.php b/classes/Link.php
index 0027d4f01..9e60b5d91 100644
--- a/classes/Link.php
+++ b/classes/Link.php
@@ -311,7 +311,7 @@ class LinkCore
$uri_path = Dispatcher::getInstance()->createUrl($controller);
$url = ($ssl AND Configuration::get('PS_SSL_ENABLED')) ? Tools::getShopDomainSsl(true) : Tools::getShopDomain(true);
$url .= __PS_BASE_URI__.$this->getLangLink($id_lang).ltrim($uri_path, '/');
- $url .= ($request ? ((strpos($url, '?') === false ? '?' : '&').trim($request)) : '');
+ $url .= ($request ? ((strpos($url, '?') === false ? '?' : '&').trim($request)) : '');
return $url;
}
diff --git a/controllers/CMSController.php b/controllers/CMSController.php
index 06b5c29f4..dad5140f2 100644
--- a/controllers/CMSController.php
+++ b/controllers/CMSController.php
@@ -39,7 +39,7 @@ class CmsControllerCore extends FrontController
if (Configuration::get('PS_CANONICAL_REDIRECT'))
{
- if (Validate::isLoadedObject($this->cms) AND $canonicalURL = $this->context->link->getCMSLink($this->cms))
+ if (Validate::isLoadedObject($this->cms) AND $canonicalURL = str_replace('&', '&', $this->context->link->getCMSLink($this->cms)))
if (!preg_match('/^'.Tools::pRegexp($canonicalURL, '/').'([&?].*)?$/', Tools::getProtocol().$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']))
{
header('HTTP/1.0 301 Moved');
@@ -47,7 +47,7 @@ class CmsControllerCore extends FrontController
die('[Debug] This page has moved
Please use the following URL instead: '.$canonicalURL.'');
Tools::redirectLink($canonicalURL);
}
- if (Validate::isLoadedObject($this->cms_category) AND $canonicalURL = $this->context->link->getCMSCategoryLink($this->cms_category))
+ if (Validate::isLoadedObject($this->cms_category) AND $canonicalURL = str_replace('&', '&', $this->context->link->getCMSCategoryLink($this->cms_category)))
if (!preg_match('/^'.Tools::pRegexp($canonicalURL, '/').'([&?].*)?$/', Tools::getProtocol().$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']))
{
header('HTTP/1.0 301 Moved');
diff --git a/controllers/ManufacturerController.php b/controllers/ManufacturerController.php
index 5ecc6e8bb..0ffc55f7f 100644
--- a/controllers/ManufacturerController.php
+++ b/controllers/ManufacturerController.php
@@ -40,7 +40,7 @@ class ManufacturerControllerCore extends FrontController
{
if (Validate::isLoadedObject($this->manufacturer))
{
- $canonicalURL = $this->context->link->getManufacturerLink($this->manufacturer);
+ $canonicalURL = str_replace('&', '&', $this->context->link->getManufacturerLink($this->manufacturer));
if (!preg_match('/^'.Tools::pRegexp($canonicalURL, '/').'([&?].*)?$/', Tools::getProtocol().$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']))
{
header('HTTP/1.0 301 Moved');
diff --git a/controllers/ProductController.php b/controllers/ProductController.php
index d2349d5d0..a8cceb02e 100644
--- a/controllers/ProductController.php
+++ b/controllers/ProductController.php
@@ -56,7 +56,7 @@ class ProductControllerCore extends FrontController
// $_SERVER['HTTP_HOST'] must be replaced by the real canonical domain
if (Validate::isLoadedObject($this->product))
{
- $canonicalURL = $this->context->link->getProductLink($this->product);
+ $canonicalURL = str_replace('&', '&', $this->context->link->getProductLink($this->product));
if (!preg_match('/^'.Tools::pRegexp($canonicalURL, '/').'([&?].*)?$/', Tools::getProtocol().$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']))
{
header('HTTP/1.0 301 Moved');
diff --git a/controllers/SupplierController.php b/controllers/SupplierController.php
index 01f9a9e53..26007ac32 100644
--- a/controllers/SupplierController.php
+++ b/controllers/SupplierController.php
@@ -43,7 +43,7 @@ class SupplierControllerCore extends FrontController
{
if (Validate::isLoadedObject($this->supplier))
{
- $canonicalURL = $this->context->link->getSupplierLink($this->supplier);
+ $canonicalURL = str_replace('&', '&', $this->context->link->getSupplierLink($this->supplier));
if (!preg_match('/^'.Tools::pRegexp($canonicalURL, '/').'([&?].*)?$/', Tools::getProtocol().$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']))
{
header('HTTP/1.0 301 Moved');