I recently converted a blog from Wordpress to Grav, and the URLs for individual (blog) posts changed as a result. I needed a solution so as to not lead to 404 page not found errors.
I am posting my (current) solution here for anyone who is looking, as I was not able to find a direct and detailed/specific how-to. I have some formal coding experience, years working with Drupal and WordPress (mostly as a theme), though am relatively new to Grav and twig.
I looked at options for redirecting (301 redirects) rather than URL aliases as these are a permanent change, and wanted search engines to update with the new URLS.
The typical URL’s on the WordPress site were
example.com/year/month/date/blog-title
For example
example.com/2008/09/11/my-thoughts-on-life
In Grav, the new URL is
example.com/blog/my-thoughts-on-life
What I have in my site.yaml folder is the following, under ‘redirects:’
/(.*)/(.*)/(.*)/(.*): /blog/$4[301]
The first part, before the colon, is the existing URL. The second part is the new URL in Grav (i.e. where I want to redirect to).
My understanding, taking into account I am not very familiar with regex, is that
-
(.*) is a wildcard that represents what I wanted to replace: one each for year, month, date and title.
-
‘blog’ is in the new URL
-
$4 represents the fourth item ($argument) in the existing URL (i.e. ‘my-thoughts-on-life’)
-
[301] is the redirect code, which is stripped from the URL
Someone may have a more elegant solution, or even point out shortcomings of this one.
From my testing, it works and removes any need to manually add ~200 individual URL redirect to site.yaml for this site.