1

I am trying to edit .htaccess to do 301 redirect from old domain to new. I was wondering if there's a way to do a 301 redirect that matches a certain keywords. So instead of writing 301 for each line, is there a way to redirect if apple or oranges or bananas show up after /blog/ with a couple lines of code and have them all 301 perm redirect to /blog/fruits/?

Example:

/blog/apple/
/blog/oranges/
/blog/bananas/

301 redirect to

/blog/fruits/
1
  • Is the new domain on the same webspace as the old domain? Do you have existing redirects in .htaccess - are you using mod_alias (Redirect) or mod_rewrite (RewriteRule).
    – MrWhite
    May 17, 2016 at 17:02

2 Answers 2

2

You can do this with mod_rewrite, for example:

RewriteEngine On
RewriteRule ^blog/(apple|oranges|bananas)/ /blog/fruit/ [R=301,L]

This literally redirects just the 3 URLs listed in the question. If you wanted to redirect from /blog/apple/<something> to /blog/fruit/<something> then you can modify the above RewriteRule to:

RewriteRule ^blog/(apple|oranges|bananas)/(.*) /blog/fruit/$2 [R=301,L]

Example: /blog/the-oranges-is-good-fruit/ would match or /blog/my-apples-and-oranges/ would match and triggers the 301 redirect

To match URLs where these words are contained anywhere inside that path segment then the above RewriteRule can be changed to:

RewriteRule ^blog/[^/]*(apple|oranges|bananas)[^/]*/ /blog/fruit/ [R=301,L]

The [^/]* matches any number of characters that are not slashes (path segment delimiter).

4
  • Thank you @w3dk, will it covers if there's wild cards characters in front or end of these sets of characters? could i just add the * wild card like this? ^blog/*(apple|oranges|bananas)*/ ?
    – KJYe.Name
    May 17, 2016 at 17:07
  • What are you trying to match specifically? You can't simply add "wild cards characters in front or end" - this is a regular expression (regex), not a glob pattern. (In a regex, the * matches the previous element 0 or more times.)
    – MrWhite
    May 17, 2016 at 18:19
  • Basically, i want to 301 redirect /blog/<set of words>/ so if it contains substrings of apple, oranges, or bananas and it'll redirect to url of my choice. Example: /blog/the-oranges-is-good-fruit/ would match or /blog/my-apples-and-oranges/ would match and triggers the 301 redirect. Does this make sense?
    – KJYe.Name
    May 17, 2016 at 18:25
  • I've updated my answer.
    – MrWhite
    May 17, 2016 at 18:38
0

Even if there were a way to do this, you might find that you're actually doing the same thing in 2 different ways.

Is there a difference between writing several individual 301 redirects and writing some script (I'm not even sure whether you'd be able to accomplish this with .htaccess) that uses some list/array of keywords that you needed to input by hand?

If the idea of writing that many redirects is daunting. I would suggest using a spreadsheet and the CONCATENATE formula to make your life very easy:

formula

result

=CONCATENATE($A$23,A26," ",B26)

1
  • I am trying to reduce the amount of written lines in .htaccess especially if i have more than 1000 url redirects that need to be done
    – KJYe.Name
    May 17, 2016 at 16:41

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.