Fixed double (and sometimes triple) slash in URLs

This commit is contained in:
Marcin Kurczewski 2014-05-18 21:11:45 +02:00
parent c50c368d2f
commit 79f9ab9950
4 changed files with 31 additions and 22 deletions

View file

@ -9,23 +9,6 @@ class PostController extends AbstractController
try try
{ {
//redirect requests in form of /posts/?query=... to canonical address
$formQuery = InputHelper::get('query');
if ($formQuery !== null)
{
$context->transport->searchQuery = $formQuery;
$context->transport->lastSearchQuery = $formQuery;
if (strpos($formQuery, '/') !== false)
throw new SimpleException('Search query contains invalid characters');
$url = \Chibi\Router::linkTo(['PostController', 'listView'], [
'source' => $source,
'additionalInfo' => $additionalInfo,
'query' => $formQuery]);
$this->redirect($url);
return;
}
$query = trim($query); $query = trim($query);
$context->transport->searchQuery = $query; $context->transport->searchQuery = $query;
$context->transport->lastSearchQuery = $query; $context->transport->lastSearchQuery = $query;
@ -57,6 +40,27 @@ class PostController extends AbstractController
$this->renderView('post-list-wrapper'); $this->renderView('post-list-wrapper');
} }
public function listRedirectAction($source = 'posts')
{
$context = Core::getContext();
$query = trim(InputHelper::get('query'));
$context->transport->searchQuery = $query;
$context->transport->lastSearchQuery = $query;
if (strpos($query, '/') !== false)
throw new SimpleException('Search query contains invalid characters');
$params = [];
$params['source'] = $source;
if ($query)
$params['query'] = $query;
#if ($additionalInfo)
# $params['additionalInfo'] = $additionalInfo;
$params['page'] = 1;
$url = \Chibi\Router::linkTo(['PostController', 'listView'], $params);
$this->redirect($url);
}
public function favoritesView($page = 1) public function favoritesView($page = 1)
{ {
$this->listView('favmin:1', $page, 'favorites'); $this->listView('favmin:1', $page, 'favorites');

View file

@ -142,14 +142,15 @@ class TagController extends AbstractController
$params = $params =
[ [
'source' => 'mass-tag', 'source' => 'mass-tag',
'query' => $suppliedQuery ?: ' ', 'query' => $suppliedQuery ?: '',
'additionalInfo' => $suppliedTag ? $suppliedTag : '', 'additionalInfo' => $suppliedTag ? $suppliedTag : '',
]; ];
if ($suppliedOldPage != 0 and $suppliedOldQuery == $suppliedQuery) if ($suppliedOldPage != 0 and $suppliedOldQuery == $suppliedQuery)
$params['page'] = $suppliedOldPage; $params['page'] = $suppliedOldPage;
$this->redirect(\Chibi\Router::linkTo(['PostController', 'listView'], $params)); $url = \Chibi\Router::linkTo(['PostController', 'listView'], $params);
$this->redirect($url);
} }

View file

@ -155,7 +155,9 @@
<?php endif ?> <?php endif ?>
<li class="search"> <li class="search">
<form name="search" action="<?= \Chibi\Router::linkTo(['PostController', 'listView']) ?>" method="get"> <form method="post"
action="<?= \Chibi\Router::linkTo(['PostController', 'listRedirectAction']) ?>"
name="search">
<input <input
class="autocomplete" class="autocomplete"

View file

@ -27,6 +27,7 @@ $postValidation =
'query' => '[^\/]*', 'query' => '[^\/]*',
'additionalInfo' => '[^\/]*', 'additionalInfo' => '[^\/]*',
'score' => '-1|0|1', 'score' => '-1|0|1',
'page' => '\d*',
]; ];
\Chibi\Router::register(['PostController', 'uploadView'], 'GET', '/posts/upload', $postValidation); \Chibi\Router::register(['PostController', 'uploadView'], 'GET', '/posts/upload', $postValidation);
@ -36,9 +37,10 @@ $postValidation =
\Chibi\Router::register(['PostController', 'deleteAction'], null, '/post/{id}/delete', $postValidation); \Chibi\Router::register(['PostController', 'deleteAction'], null, '/post/{id}/delete', $postValidation);
\Chibi\Router::register(['PostController', 'listView'], 'GET', '/{source}', $postValidation); \Chibi\Router::register(['PostController', 'listView'], 'GET', '/{source}', $postValidation);
\Chibi\Router::register(['PostController', 'listView'], 'GET', '/{source}/{query}', $postValidation); \Chibi\Router::register(['PostController', 'listView'], 'GET', '/{source}/{page}', $postValidation);
\Chibi\Router::register(['PostController', 'listView'], 'GET', '/{source}/{query}/{page}', $postValidation); \Chibi\Router::register(['PostController', 'listView'], 'GET', '/{source}/{query}/{page}', $postValidation);
\Chibi\Router::register(['PostController', 'listView'], 'GET', '/{source}/{additionalInfo}/{query}/{page}', $postValidation); \Chibi\Router::register(['PostController', 'listView'], 'GET', '/{source}/{query}/{additionalInfo}/{page}', $postValidation);
\Chibi\Router::register(['PostController', 'listRedirectAction'], 'POST', '/{source}-redirect', $postValidation);
\Chibi\Router::register(['PostController', 'randomView'], 'GET', '/random', $postValidation); \Chibi\Router::register(['PostController', 'randomView'], 'GET', '/random', $postValidation);
\Chibi\Router::register(['PostController', 'randomView'], 'GET', '/random/{page}', $postValidation); \Chibi\Router::register(['PostController', 'randomView'], 'GET', '/random/{page}', $postValidation);