Trimming query string when it shouldn't
jimmycook opened this issue · 4 comments
Using latest master branch
This then trims any query string passed to it.
For example I've been using /cookingwithcod?test=true and this is the log output:
2017/09/04 15:59:31 [info] [plugin] A 404 exception occurred
in /Users/jimmy/Code/Sites/fishisthedish/craft/app/etc/plugins/BasePlugin.php (65)
in /Users/jimmy/Code/Sites/fishisthedish/craft/plugins/retour/RetourPlugin.php (32)
2017/09/04 15:59:31 [info] [plugin] 404 URL: /cookingwithcod?test=true
in /Users/jimmy/Code/Sites/fishisthedish/craft/app/etc/plugins/BasePlugin.php (65)
in /Users/jimmy/Code/Sites/fishisthedish/craft/plugins/retour/RetourPlugin.php (41)
2017/09/04 15:59:31 [info] [plugin] Cached Redirect hit:
in /Users/jimmy/Code/Sites/fishisthedish/craft/app/etc/plugins/BasePlugin.php (65)
in /Users/jimmy/Code/Sites/fishisthedish/craft/plugins/retour/services/RetourService.php (128)
in /Users/jimmy/Code/Sites/fishisthedish/craft/plugins/retour/services/RetourService.php (91)
2017/09/04 15:59:32 [info] [plugin] Not handled: /cookingwithcod?test=true
in /Users/jimmy/Code/Sites/fishisthedish/craft/app/etc/plugins/BasePlugin.php (65)
in /Users/jimmy/Code/Sites/fishisthedish/craft/plugins/retour/services/RetourService.php (254)
in /Users/jimmy/Code/Sites/fishisthedish/craft/plugins/retour/services/RetourService.php (103)
2017/09/04 15:59:32 [info] [plugin] Not handled: /cookingwithcod?test=true
in /Users/jimmy/Code/Sites/fishisthedish/craft/app/etc/plugins/BasePlugin.php (65)
in /Users/jimmy/Code/Sites/fishisthedish/craft/plugins/retour/services/RetourService.php (254)
in /Users/jimmy/Code/Sites/fishisthedish/craft/plugins/retour/services/RetourService.php (111)
2017/09/04 15:59:32 [info] [plugin] Cached Redirect hit: Array
(
[id] => 1253
[redirectSrcUrl] => /cookingwithcod
[redirectSrcUrlParsed] => /cookingwithcod
[redirectMatchType] => exactmatch
[redirectDestUrl] => /recipes/cooking-with-cod
[redirectHttpCode] => 301
[hitCount] => 16
[hitLastTime] => 2017-09-04 15:57:48
[locale] => en_gb
[associatedElementId] => 0
[dateCreated] => 2017-09-04 15:06:40
[dateUpdated] => 2017-09-04 15:52:19
[uid] => 193f894f-3970-43bf-9a87-fe55f16b77f2
)
in /Users/jimmy/Code/Sites/fishisthedish/craft/app/etc/plugins/BasePlugin.php (65)
in /Users/jimmy/Code/Sites/fishisthedish/craft/plugins/retour/services/RetourService.php (128)
in /Users/jimmy/Code/Sites/fishisthedish/craft/plugins/retour/services/RetourService.php (91)
2017/09/04 15:59:32 [info] [plugin] Cached Redirect saved: 1
in /Users/jimmy/Code/Sites/fishisthedish/craft/app/etc/plugins/BasePlugin.php (65)
in /Users/jimmy/Code/Sites/fishisthedish/craft/plugins/retour/services/RetourService.php (163)
in /Users/jimmy/Code/Sites/fishisthedish/craft/plugins/retour/services/RetourService.php (94)
2017/09/04 15:59:32 [info] [plugin] [cached] exactmatch result:
in /Users/jimmy/Code/Sites/fishisthedish/craft/app/etc/plugins/BasePlugin.php (65)
in /Users/jimmy/Code/Sites/fishisthedish/craft/plugins/retour/services/RetourService.php (95)
in /Users/jimmy/Code/Sites/fishisthedish/craft/plugins/retour/RetourPlugin.php (53)
2017/09/04 15:59:32 [info] [plugin] Trimmed 0 from retour_stats table
in /Users/jimmy/Code/Sites/fishisthedish/craft/app/etc/plugins/BasePlugin.php (65)
in /Users/jimmy/Code/Sites/fishisthedish/craft/plugins/retour/services/RetourService.php (431)
in /Users/jimmy/Code/Sites/fishisthedish/craft/plugins/retour/services/RetourService.php (401)
2017/09/04 15:59:32 [info] [plugin] Redirecting /cookingwithcod?test=true to /recipes/cooking-with-cod
in /Users/jimmy/Code/Sites/fishisthedish/craft/app/etc/plugins/BasePlugin.php (65)
in /Users/jimmy/Code/Sites/fishisthedish/craft/plugins/retour/RetourPlugin.php (58)
Hope that's enough info, this doesn't seem to be intended behaviour.
It tries to match both with and without the query string:
$redirect = craft()->retour->findRedirectMatch($url);
if (isset($redirect)) {
craft()->retour->incrementStatistics($url, true);
$event->handled = true;
RetourPlugin::log("Redirecting " . $url . " to " . $redirect['redirectDestUrl'], LogLevel::Info, false);
craft()->request->redirect($redirect['redirectDestUrl'], true, $redirect['redirectHttpCode']);
} else {
// Now try it without the query string, too, otherwise let Craft handle it
$redirect = craft()->retour->findRedirectMatch($noQueryUrl);
if (isset($redirect)) {
craft()->retour->incrementStatistics($url, true);
$event->handled = true;
RetourPlugin::log("Redirecting " . $url . " to " . $redirect['redirectDestUrl'], LogLevel::Info, false);
craft()->request->redirect($redirect['redirectDestUrl'], true, $redirect['redirectHttpCode']);
} else {
craft()->retour->incrementStatistics($url, false);
}
}
is there a way to preserve the query string every time? Looking to keep parameters there for tracking reasons.
Thanks
Yeah you can do that with a RegEx match
Is there anyway to preserve the query string with dynamic redirects? Or should these all be converted over to static redirects?