Skip to content

Commit

Permalink
Fix trailing slash used a product & category URL suffix
Browse files Browse the repository at this point in the history
  • Loading branch information
ihor-sviziev committed Jun 24, 2017
1 parent 3cfa32b commit c4b5874
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 2 deletions.
2 changes: 1 addition & 1 deletion app/code/Magento/UrlRewrite/Controller/Router.php
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ protected function redirect($request, $url, $code)
protected function getRewrite($requestPath, $storeId)
{
return $this->urlFinder->findOneByData([
UrlRewrite::REQUEST_PATH => trim($requestPath, '/'),
UrlRewrite::REQUEST_PATH => ltrim($requestPath, '/'),
UrlRewrite::STORE_ID => $storeId,
]);
}
Expand Down
52 changes: 51 additions & 1 deletion app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,11 @@
*/
namespace Magento\UrlRewrite\Model\Storage;

use Magento\Framework\Api\DataObjectHelper;
use Magento\Framework\App\ResourceConnection;
use Magento\UrlRewrite\Model\OptionProvider;
use Magento\UrlRewrite\Service\V1\Data\UrlRewrite;
use Magento\UrlRewrite\Service\V1\Data\UrlRewriteFactory;
use Magento\Framework\Api\DataObjectHelper;

class DbStorage extends AbstractStorage
{
Expand Down Expand Up @@ -78,6 +79,55 @@ protected function doFindAllByData($data)
*/
protected function doFindOneByData($data)
{
if (is_array($data)
&& array_key_exists(UrlRewrite::REQUEST_PATH, $data)
&& is_string($data[UrlRewrite::REQUEST_PATH])
) {
$result = null;

$requestPath = $data[UrlRewrite::REQUEST_PATH];

$data[UrlRewrite::REQUEST_PATH] = [
rtrim($requestPath, '/'),
rtrim($requestPath, '/') . '/',
];

$resultsFromDb = $this->connection->fetchAll($this->prepareSelect($data));

if (count($resultsFromDb) === 1) {
$resultFromDb = current($resultsFromDb);

// If request path matches the DB value
if ($resultFromDb[UrlRewrite::REQUEST_PATH] === $requestPath) {
$result = $resultFromDb;
} else {
// Otherwise return 301 redirect to request path from DB results
$result = [
UrlRewrite::ENTITY_TYPE => 'custom',
UrlRewrite::ENTITY_ID => '0',
UrlRewrite::REQUEST_PATH => $requestPath,
UrlRewrite::TARGET_PATH => $resultFromDb[UrlRewrite::REQUEST_PATH],
UrlRewrite::REDIRECT_TYPE => OptionProvider::PERMANENT,
UrlRewrite::REDIRECT_TYPE => OptionProvider::PERMANENT,
UrlRewrite::STORE_ID => $resultFromDb[UrlRewrite::STORE_ID],
UrlRewrite::DESCRIPTION => null,
UrlRewrite::IS_AUTOGENERATED => '0',
UrlRewrite::METADATA => NULL,
];
}
} else {
// If we have 2 results - return the row that matches request path
foreach ($resultsFromDb as $resultFromDb) {
if ($resultFromDb[UrlRewrite::REQUEST_PATH] === $requestPath) {
$result = $resultFromDb;
break;
}
}
}

return $result;
}

return $this->connection->fetchRow($this->prepareSelect($data));
}

Expand Down

0 comments on commit c4b5874

Please sign in to comment.