Version 3.2.14

March 25, 2024

Fixed

  • Added the unused static to the Tailwind CSS blocklist to avoid a name collision with a Craft CSS class (#1412)
  • Fixed an issue with impropertly text-encoded characters in URLs potentially causing a db exception (#291)
  • Fixed an issue where an empty redirect in the excludePatterns list could cause redirects to stop functioning, add logging when a redirect is excluded (#297)

Version 3.2.13

February 5, 2024

Added

  • Add phpstan and ecs code linting
  • Add code-analysis.yaml GitHub action

Changed

  • Switch over to Vite ^5.0.0 & Node ^20.0.0 for the buildchain
  • Updated docs to use node 20 & a new sitemap plugin
  • PHPstan code cleanup
  • ECS code cleanup

Fixed

  • Fixed an issue that could cause an exception to be thrown if the Preserve Query String setting is on
  • Fixed an issue where the filter controls didn't work properly for Short Links

Version 3.2.12

October 26, 2023

Fixed

  • Fixes issue where only first line of uploaded CSV is saved in cache in load balanced environment (#286)
  • Strip off a leading / before making a site URL from a path, because otherwise Craft.getUrl() considers it an absolute URL and returns it (#281)

Version 3.2.11

August 15, 2023

Added

  • Add db index for redirectMatchType to help with query performance (#282)

Changed

  • Add permission fallback logic to the dashboard for Short Links access

Security

  • Fixed a potential XSS vulnerability with a malformed referrer header

Version 3.2.10

April 7, 2023

Changed

  • Enforce full URL matching for short links when used within a multi-site setup and enabling any of the content translation method for the field. (#277)

Fixed

  • Fixed a bug where short links would not work correctly within Matrix fields. (#279)
  • Fixed a bug where short links would not be cleaned up appropriately when updating a Short Link value on an element. (#277)
  • Fixed a bug where short links would not work correctly with multi-sites. (#277)

Version 3.2.9

March 7, 2023

Added

  • Added the ability to disable statistics recording entirely via enableStatistics in the config.php (#272)

Changed

  • Retour now requires Craft ^3.2.0
  • Add versioning to the docs

Fixed

  • Fixed an issue where no events triggered when using exactMatch redirect (#273)
  • Fixed a bug where deleting a revision would also delete all the short links associated with the element (#270)

Version 3.2.8

February 9, 2023

Changed

  • Use dynamic docker container name & port for the buildchain
  • Update the buildchain to use Vite ^4.0.0
  • Refactored the docs buildchain to use a dynamic docker container setup

Version 3.2.7

December 8, 2022

Fixed

  • Added missing priority column to the retour_static_redirects too, in Install.php migration (#262)

Version 3.2.6

December 7, 2022

Fixed

  • Added missing priority column to the Install.php migration (#262)

Version 3.2.5

December 5, 2022

Added

  • Added the ability to set a Priority for regex redirects, so you have control over the order in which they execute (#74)

Fixed

  • Fixed an issue that would cause getStaticRedirect() to return a redirect regardless of whether or not it is enabled (#260)

Version 3.2.4

November 28, 2022

Added

  • Added EVENT_BEFORE_DELETE_REDIRECT & EVENT_AFTER_DELETE_REDIRECT events, so you can hook in before & after a redirect is deleted (#259)

Changed

  • Fixed HMR in local dev with explicit alias that resolves to the actual directory
  • Add import.meta.hot.accept for entrypoint JavaScript for HMR
  • Updated docs to use VitePress ^1.0.0-alpha.29

Fixed

  • Fixed an issue where the Short Links field could throw an exception on Craft 3.x < 3.7.19
  • Handle missing describedBy for Craft 3.x < 3.7.25

Version 3.2.3

October 3, 2022

Changed

  • Move to using ServicesTrait and add getter methods for services
  • Users must have permission to access Retour to be able to use the Retour widget (#251)

Version 3.2.2

September 14, 2022

Changed

  • Fixed an issue where element types that update their uriFormat directly rather than re-saving the elements will generate automatic element redirects (#248)
  • Updated how Retour's components are registered, to allow for overriding via plugin config (#1989)
  • Update the buildchain to use Vite ^3.1.0 for building frontend assets

Version 3.2.1

September 8, 2022

Changed

  • Whether a Short Link redirect is created for "All Sites" or on a per-site basis is now determined by the propagation method of the Short Link field
  • Include "Short Link Element ID" in the CSV redirects export
  • Allow for the localization of the exported redirects & statistics column names

Fixed

  • Fix improperly named field input template (casing) (#247)
  • Editing a Short Link field's redirect in the CP now properly preserves its Short Link status, and redirects to the Short Links page

Version 3.2.0

August 30, 2022

Added

  • Added the Short Link field type that allows content authors to add short link redirects in an entry
  • Added translations in the Javascript views that Retour uses, allowing for better localization (#222)
  • If a CSV import has errors, they are displayed on the frontend to make them easier to diagnose (#219)

Changed

  • Improved the performance when resolving exact match redirects by doing a database query. (#217)
  • If the Preserve Query String plugin setting is enabled, query strings from the incoming request and the destination URL will be combined (#242)

Version 3.1.73

June 22, 2022

Changed

  • Removed the sub resource integrity on the built JavaScript, which could fail if systems were set up that manipulated the incoming JavaScript resources dynamically (#229)

Version 3.1.72

May 18, 2022

Fixed

  • Fixed an issue where the Dashboard didn't property narrow results down to the selected site, due to moreParams being saved in the object state (#236)
  • Fixed an issue where the Redirects didn't property narrow results down to the selected site, due to moreParams being saved in the object state (#235)

Version 3.1.71

April 9, 2022

Changed

  • No longer trim / from URLs that are presented in the Retour Dashboard (#227)

Version 3.1.70

January 17, 2022

Fixed

  • Fixed a regression which would cause the 404 File Not Found URL to not be displayed

Version 3.1.69

January 12, 2022

Added

  • Add .gitattributes & CODEOWNERS
  • Add linting to build
  • Add compression of assets
  • Add bundle visualizer

Version 3.1.68

December 26, 2021

Added

  • Added the ability to add 307 - Temporary Redirect and 308 - Permanent Redirect status code redirects (#216)
  • Added the ability to pass in a site handle via GraphQL to retourRedirects() or retourResolveRedirect() (#215)
  • Return the site handle via GraphQL from queries to retourRedirects() or retourResolveRedirect() (#215)

Changed

  • Updated the buildchain to use Node 16
  • Changed buildchain to Vite from webpack 5

Fixed

  • Fixed an issue that would cause the component state to not be saved properly if you clicked on the Reset button (#214)
  • Fixed an issue where non-ASCII characters were stripped from display of URLs in the Retour Dashboard & Redirects pages (#213)

Version 3.1.67

November 16, 2021

Added

  • Added the retourResolveRedirect GraphQL query that should be used instead of the retour query.
  • Added the retourRedirects GraphQL query that returns a list of all redirects for a given site.

Changed

  • The retour GraphQL query is now deprecated in favor of the retourResolveRedirect query.

Version 3.1.66

November 10, 2021

Changed

  • Truncate the column names displayed in the Import CSV function to 50 characters to prevent overrun (#209)

Fixed

  • Fixed an issue where the Import CSV function would display a blank screen if the CSV was malformed (#209)
  • Fixed an issue with $ being stripped from displayed URLs (#206)

Version 3.1.65

October 29, 2021

Fixed

  • Fixed a regression that could throw an exception during automatic Entry Redirect creation

Version 3.1.64

October 28, 2021

Added

  • Added a beforeSaveEntryRedirect event to allow you to hook in when an Entry Redirect is automatically created

Fixed

  • Catch Exception thrown by Reader::createFromPath() and use cache (#205) (#204)

Version 3.1.63

October 25, 2021

Added

  • Added a $siteId property to RedirectEvent, RedirectResolvedEvent, and ResolveRedirectEvent to allow for custom logic based on the siteId (#202)

Version 3.1.62

September 29, 2021

Added

  • Default the newly created redirect based on the siteId of the 404 statistic, if it isn't the default site (#201)

Fixed

  • Fixed an issue where the statistics for redirects via headless requests were always recorded for site ID 1 (#201)

Version 3.1.61

August 20, 2021

Fixed

  • Fixed an issue that could throw an error on CSV import if the match type column didn't exist in the imported file (#116)
  • Fixed a issue where custom delimeters were not respected for the column names (#199)

Version 3.1.60

August 17, 2021

Security

  • Fixed a potential XSS vulnerability with a malformed Referrer header

Version 3.1.59

August 13, 2021

Fixed

  • Fix an issue where Undefined class constant ‘EVENT_REGISTER_GQL_SCHEMA_COMPONENTS would be thrown if you were running Craft CMS < ^3.5.0 (#198)

Version 3.1.58

August 4, 2021

Added

  • Use the delimiter between data column setting (normally ,) for exporting CSV files, too (#194)

Changed

  • Ensure the URLs are siteUrls and not cpUrls in the Dashboard table “go” arrow (#192)

Fixed

  • Fixed an issue where the saved component state could cause it to not display redirects after deleting one while filtering the view (#196) *

Version 3.1.57

July 8, 2021

Fixed

  • Ignore the numSelected and selectedIds properties for the Dashboard Table component's save state (#191)

Version 3.1.56

July 7, 2021

Added

  • Added "Per-age" pagination controls for the Redirects page
  • Added “500” option to Dashboard stats & Redirects "Per-page"

Fixed

  • The filter text that the table components remember between page load is now properly displayed (#190)
  • Fixed an issue where the selected state was remembered after doing a bulk operation (such as Delete) (#191)

Version 3.1.55

July 2, 2021

Added

  • Added The delimiter between data column values for importing CSV files ( normally ,) (#188)
  • Allow the choice of how many statistics per-page to display (#185)
  • Both the Dashboard Statistics table and the Redirects Table now remember their state (#189)

Changed

  • If the redirectSrcUrl starts with http, default the match type to fullurl (#187)
  • Update the 404 statistics for the path including the query string, if it hasn't been stripped (#189)

Fixed

  • Fix missing use clause

Version 3.1.54

June 12, 2021

Added

  • Add GraphQL schema components for Retour.

Changed

  • Ensure that the URI doesn't match an element URI before incrementing the 404 statistics via GraphQL query (#177)
  • Switched documentation system to VitePress

Version 3.1.53

April 30, 2021

Added

  • Strip leading and trailing spaces off of all URLs (#173)

Fixed

  • Fixed an issue where clicking the Retour CP nav item would result in a 403 exception if the current user didn't have permission to view the Retour dashboard. (#151)

Version 3.1.52

April 6, 2021

Added

  • Added make update to update NPM packages
  • Added make update-clean to completely remove node_modules/, then update NPM packages

Changed

  • Use Tailwind CSS ^2.1.0 with JIT

Version 3.1.51

March 29, 2021

Changed

  • Move the manifest service registration to the constructor

Fixed

  • Fixed an issue where the CSV import wouldn't work if you were using Composer 1.x, due to package version detection issues

Version 3.1.50

March 27, 2021

Changed

  • Allow for automatic redirect creation during bulk resaving operations
  • More consistent makefile build commands
  • Use Tailwind 2.x & @tailwindcss/jit
  • Move settings from the composer.json “extra” to the plugin main class

Fixed

  • URL decode any Legacy URLs for any Exact Match redirects on save (#166)

Version 3.1.49

March 3, 2021

Changed

  • Dockerized the buildchain, using craft-plugin-manifest for the webpack HMR bridge

Version 3.1.48

February 27, 2021

Added

  • Added support for both 8.x and 9.x versions of league/csv for peer compatibility
  • PHP 8 compatibility for the import/export functions via league/csv version ^9.0

Changed

  • Ensure the URLs are siteUrls and not cpUrls in the Redirects table “go” arrow

Version 3.1.47

February 22, 2021

Changed

  • Updated build system infra

Fixed

  • Fixed an issue where 404 stats for pages without redirects in place do not increment via GraphQL

Version 3.1.46

February 2, 2021

Changed

  • Updated Axios to ^0.21.1
  • Updated to latest npm deps
  • Rebuilt frontend assets

Fixed

  • Fixed an issue that could cause migration issues from Craft 2 to Craft 3.6, use Use MigrationHelper::dropIndexIfExists()

Version 3.1.45

December 10, 2020

Changed

  • Split out vendors & commons chunks
  • Check for both types of preview requests on Craft 3.2 or later
  • Invalidate Retour's caches when a redirect is saved
  • Also invalidate the GraphQL caches on Craft CMS 3.3 or later if a Redirect is saved

Fixed

  • If a redirect is modified by a plugin event, save the changed redirect to the cache
  • Handle no siteId being passed into a GraphQL query properly, by defaulting to either the current site, or the primary site
  • Fixed an issue where the Dashboard filter didn’t work in combination with Handled / Not Handled

Version 3.1.44

December 8, 2020

Changed

  • Moved the CSS/JS buildchain over to webpack 5
  • Updated to latest npm deps

Version 3.1.43

December 4, 2020

Changed

  • Don't add slashes to destination URLs that contain a query string, regardless of the addTrailingSlashesToUrls setting

Version 3.1.42

October 4, 2020

Changed

  • Rebuilt CP assets using latest deps
  • Refactored to use registerJsModules macro for JS CP assets

Fixed

  • Fixed an issue that added a / to Reg Ex match destination URLs if you had the addTrailingSlashesToUrls General Config setting set to true

Version 3.1.41

July 30, 2020

Fixed

  • Added craftcms/cms back in as a dependency so Craft sees updates to the plugin again

Changed

  • Overwrite existing headers rather than adding to them with the Additional Headers setting

Version 3.1.40

July 5, 2020

Added

  • Added the Codeception testing framework to SEOmatic
  • Added a Unit Test to Retour that executes on every push to GitHub to verify there are no regressions for (#110)
  • Added the ability to import “hits” into a redirect
  • Added a EVENT_REDIRECT_RESOLVED to allow plugins/modules to modify redirects that have been resolved.
  • Added an “Additional Headers” setting that allows you to define additional headers that are added to the redirect response

Fixed

  • Fixed an issue where really long ALL CAPS column names would cause the Import UI to wrap

Version 3.1.39

June 8, 2020

Added

  • Added an API endpoint to allow the fetching of all of the Retour Redirects

Version 3.1.38

April 12, 2020

Fixed

  • Also explicitly remove \n and \r characters that might be in the redirected URL

Version 3.1.37

April 2, 2020

Fixed

  • Explicitly remove any newline characters that might be in the redirected URL
  • Fixed an issue with the Dashboard Widget link not being right in certain configs

Changed

  • Updated to latest npm dependencies via npm audit fix for both the primary app and the docs

Version 3.1.36

March 24, 2020

Fixed

  • Fixed an issue where $siteId might not be typecast properly when coming from the database, causing PHP to throw an error
  • Replaced the simple // -> / replacement with a regex, to fix an issue that could inadvertently affect the protocol portion of a destination URL

Version 3.1.35

March 16, 2020

Fixed

  • Fixes an issue where UrlHelper::sanitizeUrl() would return an empty string

Version 3.1.34

March 12, 2020

Fixed

  • Handle sanitizing URLs that have special characters such as ü in them
  • Remove any double slashes from resolved RegEx redirects

Version 3.1.33

January 10, 2020

Fixed

  • Fixed an issue with the migration that happened for sites that were upgraded from Craft 2.x

Version 3.1.32

January 9, 2020

Added

  • Added URL sanitization to the redirect URL that Retour passes to $response->redirect()
  • If addTrailingSlashesToUrls is set, add a slash to the end of Destination URL if the URL is a site URL
  • Added indexes for redirectSrcUrl in all tables to make queries perform better

Version 3.1.31

December 11, 2019

Security

  • Throw an exception if an invalid sort field is passed into the controller methods, to eliminate a low-impact SQL injection vulnerability

Version 3.1.30

December 9, 2019

Added

Fixed

  • Fixed a low-impact SQL injection vulnerability

Version 3.1.29

November 18, 2019

Changed

  • Added a try / catch around regular expression parsing to gracefully handle malformed input
  • Log invalid regex's to web.log

Fixed

  • Fixed an issue where deleting statistics could throw an error

Version 3.1.28

November 11, 2019

Added

  • Added the ability to bulk delete Statistics & Redirects
  • Added the ability to display only handled or not handled statistics

Version 3.1.27

October 24, 2019

Changed

  • Added a CSV import field for Legacy URL Match Type
  • Cleaned up the GraphQL type generator

Version 3.1.26

October 7, 2019

Changed

  • Added native GraphQL support

Version 3.1.25

September 27, 2019

Changed

  • Fixed an issue where the enabled/disabled status of a redirect wasn't correctly shown in the list view
  • Fixed an issue where the IP address lookup was no longer working
  • Added Sites to the Redirects table listing

Version 3.1.24

September 9, 2019

Changed

  • Replaced frontend api route with an actionUrl()

Version 3.1.23

August 21, 2019

Added

  • Added a Entry Redirects URL Match Type setting so that full URLs can be used for the automatic Entry Redirects if you have a site that has a sub-directory as part of the siteUrl

Changed

  • Updated assets build to update to the latest npm packages

Version 3.1.22

July 18, 2019

Changed

  • Proper fix for an issue that would cause uploading assets on Craft 3.2 to fail with "Asset is missing its folder ID"

Version 3.1.21

July 18, 2019

Changed

  • Removed the pointless language switcher from the Import CSV File template
  • Fixed an issue that would cause uploading assets on Craft 3.2 to fail with "Asset is missing its folder ID"

Version 3.1.20

July 17, 2019

Changed

  • Fixed a regression that could throw an exception when an entry's slug is changed on pre-Craft 3.2

Version 3.1.19

July 17, 2019

Changed

  • Fixed an issue where a spurious redirect was created for new entries on Craft 3.2 if Create Entry Redirects is enabled

Version 3.1.18

July 15, 2019

Added

  • Added a ResolveRedirectEvent that modules/plugins can listen to if they want to resolve their own redirects

Changed

  • Store uploaded CSV files in the cache, as a fallback method to accessing it
  • Handle addTrailingSlashesToUrls config setting for automatic slug change redirects

Version 3.1.17

July 10, 2019

Changed

  • Do not try to create automatic redirects for drafts and revisions in Craft 3.2 or later

Version 3.1.16

June 12, 2019

Added

  • Added GraphQL support so SPAs can give their content authors a way to manage 404s via the CP

Changed

  • Updated to Tailwind CSS ^1.0.0
  • Updated to the latest ApexCharts, fixed issues due to changed APIs
  • Fixed an issue with really long field titles overflowing the Import CSV File UI

Version 3.1.15

May 21, 2019

Changed

  • Updated build system

Version 3.1.14

May 2, 2019

Changed

  • Added a Statistics Trimming Rate Limit that defaults to once per hour, to prevent the statistics trimming from impacting performance

Version 3.1.13

April 30, 2019

Changed

  • Fixed an issue with the widget icon not showing up properly
  • Fixed an issue with non-admin users being unable to export statistics

Version 3.1.12

April 25, 2019

Changed

  • Fixes an issue where Retour would delete the first redirect with a null siteId, when saving a new redirect with siteId set

Version 3.1.11

April 22, 2019

Changed

  • Updated Twig namespacing to be compliant with deprecated class aliases in 2.7.x

Version 3.1.10

April 18, 2019

Changed

  • Make sure the URL we redirect to is a full URL, and is based on the defined siteUrl
  • Migration for Retour widgets
  • Added a Dashboard Refresh Interval control to let people choose the refresh interval (or disable it)
  • Ensure the user has permission for a given site to be able to edit redirects for it

Version 3.1.9

April 9, 2019

Changed

  • Fixed an issue where an empty Exclude Patterns table and the use of Project Config on Craft 3.1 or later could cause an exception to be thrown when a 404 is thrown

Version 3.1.8

April 2, 2019

Added

  • Added the ability to exclude URIs from Retour completely via a series of RegEx

Changed

  • If Preserve Query String is on, make sure the path p= isn't part of it
  • Don't log stats update errors, because it's pointless, and can report meaningless deadlock errors
  • Ensure that a user has permission to access a site group to redirect something to it
  • Fixed an issue where automatic redirects based on renamed entries didn't create the redirect for the right siteId in multi-site setups

Version 3.1.7

March 20, 2019

Changed

  • Fixed an issue with pagination of statistics and redirects when limiting them to a specific site
  • Don't allow editing of the plugin settings if allowAdminChanges is false
  • Record the user IP instead of Proxy IP
  • Disable "Redirect To" link when there is a token in the destination url
  • Display an error when a redirect is not saved because it'd create a redirect loop

Version 3.1.6

February 4, 2019

Changed

  • Reverted the semver on league/csv back to ^8.2 due to incompatible APIs
  • Fixed an issue with a missing Dashboard icon

Version 3.1.5

January 23, 2019

Changed

  • Updated the semver on league/csv to ^8.2|^9.1

Version 3.1.4

January 18, 2019

Changed

  • Fixed the breadcrumbs in the CP to respect the currently selected site

Version 3.1.3

January 10, 2019

Changed

  • Fixed an issue where the live reload of 404 data would cause the pagination to reset to viewing the first page

Version 3.1.2

January 3, 2019

Changed

  • Register cache options for every type of request
  • Added beforeSaveRedirect and beforeSaveRedirect events for plugin/module or Webhooks plugin use

Version 3.1.1

December 19, 2018

Changed

  • For multi-site setups, auto-create slug redirects for the element's site only
  • Fixed a minor JavaScript issue visible only in webpack-dev-server
  • Updated the PostCSS build packages & config

Version 3.1.0

December 17, 2018

Added

  • Added the ability to have true multi-site capabilities, with redirects that only affect specific sites
  • Added live refresh of the Dashboard data

Version 3.0.18

November 23, 2018

Changed

  • Fixed an issue with the charts controller for the Widget charts on Postgres
  • Fixed an issue in Statistics.php with Postgres

Version 3.0.17

November 5, 2018

Changed

  • Fix missing welcome icon

Version 3.0.16

November 4, 2018

Changed

  • Fixed an issue with trimStatistics() if you're using Postgres
  • Retooled the JavaScript build system to be more compatible with edge case server setups

Version 3.0.15

October 29, 2018

Changed

  • Handle a Retour return status > 400 to render the actual error template
  • Fixed a console error in the Dashboard if no data was returned for a chart
  • Updated the build system

Version 3.0.14

October 18, 2018
null

Version 3.0.13

October 17, 2018

Changed

  • Fixed an issue where the charts wouldn't generate properly if you were using MySQL 5.7 or later
  • Fixed an issue with the charts not generating properly if you were using Postgres
  • Fixed a padding issue with the widget chart

Version 3.0.12

October 14, 2018

Added

  • Added the ability to redirect based on Path Only or Full URL, to allow for site-specific redirects
  • Added Legacy URL Match Type and Remote IP to the import and export fields

Changed

  • Trimmed the database tables to be more storage space efficient

Version 3.0.11

October 13, 2018

Added

  • Added Remote IP to the Dashboard statistics, with a link to look up a geo-location
  • Added config setting for Record Remote IP

Changed

  • Fixed an issue where the search function wouldn't work in the Control Panel if you were using Postgres
  • Fixed incorrect links to the documentation
  • Fixed an issue where a user with the proper permissions could not save a new redirect
  • Fixed the build process so it will no longer look for devServer on installs

Version 3.0.10

October 5, 2018

Changed

  • Updated build process

Version 3.0.9

September 24, 2018

Changed

  • Modernized package.json and webpack build

Version 3.0.8

September 20, 2018

Changed

  • Fixed a regression that caused you to be unable to click on a redirect to edit it
  • Added automatic manifest cache invalidation

Version 3.0.7

September 19, 2018

Added

  • Added a retour/stats/trim console command to manually trim the statistics table

Changed

  • Added an Automatically Trim Statistics option (defaults to true) in Settings and config.php

Version 3.0.6

September 18, 2018

Changed

  • Fixed an issue when creating new redirects on a Postgres database
  • Fixed a cosmetic issue where RegEx's with a | in them were not displayed correctly in the table
  • Fixed an issue where the + add button didn't work right on some configurations

Version 3.0.5

September 14, 2018

Changed

  • Fixed an error with multi-site when an element existed on one site, but not the main site

Version 3.0.4

September 13, 2018

Changed

  • Fixed an issue where RegEx redirects would have the Destination URL overwritten by the parsed result after a hit
  • Fixed an issue where cached resolved redirects would not increment statistics

Version 3.0.3

September 13, 2018

Added

  • Added documentation for User Group based Permissions in Retour

Changed

  • Fixed an issue with line endings for CSV files that were generated by Mac computers

Version 3.0.2

September 12, 2018

Changed

  • Fixed issues with the + and x URLs in the Control Panel not working as intended

Version 3.0.1

September 12, 2018

Changed

  • Fixed the CSV importer to it imports more than just the first entry in the CSV

Version 3.0.0

September 12, 2018

Added

  • Initial release