Coded something up in Couch in an interesting way? Have a snippet or shortcode to share? Post it here for the community to benefit.
6 posts Page 1 of 1
For sites that have been around for some time, it is a pretty common requirement to rename pages/folders or to rename templates.
This, of course, modifies their links and then SEO considerations dictate that the older links redirect to the revised locations instead of throwing 404 errors.

The canonical solution for this use-case is through the use of .htaccess file -
viewtopic.php?f=4&t=12684#p35784

However, end-users generally find the task of editing '.htaccess' manually rather daunting.
As an alternative, here is an addon that will allow configuring the redirect rules from within the admin-panel.

files.zip
(2.44 KiB) Downloaded 4018 times

Before moving on further with the discussion, I'd like to mention upfront that there are two requirements for this addon -
1. The site needs to be using prettyURLs (https://docs.couchcms.com/concepts/pretty-urls.html).
Since we are assuming the site is already in production, and SEO is a consideration, this should be a non-issue.

2. One of the Couch templates used by the site should be 'index.php'.
Again, generally this is the very first template that gets ported to Couch in a site so this also should be a non-issue.

OK, so let's begin by installing the addon.

Installation:

Unzipping the attached file should yield a folder named 'files' containing two elements - a folder named 'redirector' and a file named 'redirections.php'.
The two elements need to be placed in two different locations.

1. Move the 'redirector' folder to within the 'couch/addons/' folder of your site.

Activate the addon by adding the following line of code in 'couch/addons/kfunctions.php' file (if the file is not present, rename the 'kfunctions.example.php' file found in the same folder to 'kfunctions.php') -
Code: Select all
require_once( K_COUCH_DIR.'addons/redirector/redirector.php' );

2. Move the file 'redirections.php' to within the root of your website.

This file is actually a bonafide Couch template (like the other templates in the root of your site) and you'll now need to register it.
You know the drill - login as super-admin and then visit https://www.place_yoursite_here.com/redirections.php.

Coming back to the admin-panel, you should see a new item added beneath the 'Administration' heading in the sidebar.
sidebar.png
sidebar.png (7.67 KiB) Viewed 43134 times

Clicking on it should show you this -
redirector.png
redirector.png (12.67 KiB) Viewed 43134 times

Usage:

As should be evident from the screenshot above, you can enter your redirection rules here.
Let us enter some now -

Suppose 'https://yoursite.com/service/design.html' (where 'service' is the template named service.php and 'design' is the page's name) no longer exists because you have renamed the page from 'design' to 'web-design' (which makes 'https://yoursite.com/service/web-design.html' the new URL).

Following rule entered into the table will make sure anyone still accessing the non-existent URL will be redirected to the new URL instead -
1.png
1.png (15.87 KiB) Viewed 43134 times

i.e. the redirection will take place as follows -
'https://yoursite.com/service/design.html' => 'https://yoursite.com/service/web-design.html'

Now suppose we had to rename the template itself from 'service' to 'portfolio';
this invalidates the URLs of all folders and pages belonging to the template and we wish to redirect them all to the newer URLs.

Following single rule would do just that -
2.png
2.png (12.21 KiB) Viewed 43134 times

With the rule above, the redirections will take place as follows -
'https://yoursite.com/service/' => 'https://yoursite.com/portfolio/'
'https://yoursite.com/service/web/' => 'https://yoursite.com/portfolio/web/'
'https://yoursite.com/service/web/design.html' => 'https://yoursite.com/portfolio/web/design.html'
'https://yoursite.com/service/web/design.html?x=23&y=42' => 'https://yoursite.com/portfolio/web/design.html?x=23&y=42'

As can be seen in both the rules above, if the value entered in the 'URI' textbox matches with the 'uri' portion of the current URL, the matched portion is replaced by the value entered in the 'To' text box.

If you are unclear on exactly what constitues the 'uri', please see the following note -

>>>>>>>>>>>>>>>>>>>>>>>>>>NOTE>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Assuming 'https://yoursite.com/' is your site and following is the URL used to access a page -
Code: Select all
https://yoursite.com/service/design.html?x=23&y=42#target

The URL above consists of the three components -
1. site_url: https://yoursite.com
2. uri: /service/design.html
3. query_string: x=23&y=42

Please notice the following points in the breakup -
a. The '#' fragment at the end of the URL above is totally ignored because it is purely a browser construct and is never sent to the server.
b. The 'uri' begins with (and contains) the first '/' after the 'site_url' and ends just before the '?' (or the end of the URL if there is no '?').
c. The 'query_string', if present, begins after the '?' and goes to the end.

One slight complexity occurs in cases where you have chosen to install 'couch' folder within some sub-folder of the site (instead of the usual location that is site's root).

So suppose the 'couch' folder is located within the 'service' folder of the site's root.
In this case, following would be the values for the three mentioned components -
1. site_url: https://yoursite.com/service
2. uri: /design.html
3. query_string: x=23&y=42

As you can see, the 'site_url' now includes the folder in which 'couch' is installed.
The 'uri', as per its definition of beginning with the first '/' after 'site_url', now becomes '/design.html'.
>>>>>>>>>>>>>>>>>>>>>>>>>>NOTE END>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Both the examples given above used the 'Simple' option for 'Match' heading.
Mostly that option should suffice for all the common use-cases but if more control is required on what should be matched in the 'uri' and what should be replaced, one may use the 'RegEx' option.

Regular Expressions are beyond the scope of this discussion so I'll just post the RegEx equivalent of the second rule we used above (the one that redirects all '/service' URLs to '/portfolio') -
3.png
3.png (14.17 KiB) Viewed 43134 times

As can be seen, it is vastly more complex than its simple equivalent. Hopefully, there won't be many occasions where you'll require it.

Hope the community finds this addon useful.
Do test it and let me know.

Thanks.
Great!
A good opportunity for any site built with COUCH CMS.

And of course with great practical benefit - in practice it is always necessary to make redirects for some reason and it is best to do it easily from the administration panel.

Thanks
I was actually JUST hand editing my .htaccess last night and was wondering about this capability. Perfect timing! Glad I came to the forum to see what was new.
Great work, this should be a core addon :)
Hi! As I am updating my website again, and have had to unpublish some pages, I am thrilled to use this great add-on again!
It saves so much time!

Thanks KK! :P
Beware that a combo of Redirector and Multi-lang addon demands custom Regex rules.

A working example –

^/((?:ru|en|de)/)?services(/|$)(.*)

↓↓

/$1portfolio$2$3


Also keep in mind that Redirector is designed for websites that have been around. Redirections of old non-lc pages to lc-prefixed pages will not work and can not be tweaked by Redirector.
6 posts Page 1 of 1