.htaccess 301 redirect with regular expressions

8

3

If I have:

redirect 301 /users/foo http://www.example.com/profiles/foo
redirect 301 /users/bar http://www.example.com/profiles/bar

Can I do something like?

redirect 301 ^\/users/(.+)$ http://www.example.com/profiles/$1

Edit

Found a solution:

RedirectMatch users/(.+) http://www.exapmles.com/profiles/$1 [R=301,L]

This actually redirects instead of rewriting.


Edit 2

See @Darth Android's solution with RewriteEngine which works just as well :)

macek

Posted 2010-06-21T19:43:41.353

Reputation: 5 157

Answers

12

Try using rewrite rules if you have apache:
RewriteEngine on
RewriteRule ^/users/(.*)$ http://www.example.com/profiles/$1 [R=301,L]

Note that you will need ModRewrite installed and enabled in your apache config. Pulled from here if you need a method for IIS.

Darth Android

Posted 2010-06-21T19:43:41.353

Reputation: 35 133

I actually wanted to redirect, not just rewrite. Appreciate the help though :) – macek – 2010-06-21T19:52:42.247

@macek I haven't tested it personally, but I'm under the impression that will redirect with a 301 code. I'll play around with it a bit. The [R=301,L] means to stop processing rewrite rules and issue a 301 redirect. – Darth Android – 2010-06-21T19:54:40.390

ah, I didn't know you could use [R=301,L] at then end of a RewriteRule. Thanks for this :) – macek – 2010-06-21T19:55:55.427

@macek I didn't either until about 30 seconds ago. This is why I come to this website to be entirely honest. Thanks for increasing my knowledge! :P – Darth Android – 2010-06-21T19:58:56.747

I believe the first / on the RewriteRule needs to be removed for this to work as desired. (I had to remove it for it to work on my system.) With the first / removed, we're left with: RewriteRule ^users/(.*)$ http://www.example.com/profiles/$1 [R=301,L] – rinogo – 2017-11-27T22:25:17.507

Guys, if I could ask as I'm trying to fix my weird changing url. For some time trying to do it but it just won't work. From time to time my Magento is changing URL which today is something_909.html then few days later it is no more something_909.html but something_911.html How can I do it with regex? – Rob D. A. – 2018-07-23T10:59:27.717