Siddharth Thevaril
Siddharth Thevaril

Reputation: 3798

Remove trailing dot in URL domain

We have URLs of the form:

www.dev-studio.co.uk.

www.dev-studio.co.uk./a-sample-image

With the help of .htaccess rules, I am trying to remove the trailing dot (co.uk.) in the end of the domain name but I'm failing.

This is the rule I'm trying:

RewriteCond %{HTTP_HOST} ^([a-z0-9\.-]+)(\.co\.uk\.)(.*)$
RewriteRule ^ http://www.dev-studio.co.uk/%3 [L,R=302,NE]

But the %3 which should capture the 3rd group is returning empty.

The goal is to simple redirect www.dev-studio.co.uk./a-sample-image to www.dev-studio.co.uk/a-sample-image

I have tried all the other questions over here but the solutions are not working for me. Any help would be appreciated.

Upvotes: 1

Views: 1055

Answers (1)

MrWhite
MrWhite

Reputation: 45914

RewriteCond %{HTTP_HOST} ^([a-z0-9\.-]+)(\.co\.uk\.)(.*)$
RewriteRule ^ http://www.example.co.uk/%3 [L,R=302,NE]

The HTTP_HOST server variable contains the hostname only (ie. the value of the Host HTTP request header), it does not contain the URL-path, so the %3 backreference is always empty.

You need to either capture the URL-path from the RewriteRule pattern. For example:

RewriteRule (.*) http://www.example.co.uk/$1 [R=302,L]

Or, use the REQUEST_URI server variable (which contains the full URL-path, including slash prefix) instead:

RewriteRule ^ http://www.example.co.uk%{REQUEST_URI} [R=302,L]

This should ultimately be a 301 (permanent) redirect, once you have confirmed it works OK.

Note that since you are redirecting to a specific domain, do you need a CondPattern that matches any .co.uk hostname? You could be specific:

RewriteCond %{HTTP_HOST} =www.example.co.uk.
RewriteRule ^ http://www.example.co.uk%{REQUEST_URI} [R=302,L]

The = prefix on the CondPattern changes it to a lexicographical string comparison (not a regex), so no need to escape the dots.

If you wanted an entirely generic solution to remove the trailing . (FQDN) from any requested host then you could do something like:

RewriteCond %{HTTP_HOST} (.+)\.$
RewriteRule ^ http://%1%{REQUEST_URI} [R=302,L]

Although you might want to combine this with your canonical redirects (eg. non-www to www / HTTP to HTTPS?) to avoid multiple redirects - although they are probably unlikely to occur all at once anyway, so probably not an issue.

Upvotes: 1

Related Questions