Search code examples
apache.htaccessmod-rewrite

How to solve too many redirects problem - htaccess


Recently I made a small change in my API domain path, I don't want to update my app and I want to solve the URL issue using a .htaccess file.

My current API domain is : https://api.example.com

I need to redirect to https://api.example.com/en/

I have API for

  • English - https://api.example.com/en
  • Arabic - https://api.example.com/ar

But my current Englsh API is https://api.example.com only, and I need to add /en/ to it.

If it is /ar/ already then no need to do anything.

I want to redirect to https://api.example.com/en/ if the access domain is only https://api.example.com.

Because before I served the English version of my API directly from the domain but now I've separated that to en - for English and ar for Arabic.

My code :

RewriteEngine on
RewriteCond %{HTTP_HOST} ^api.example.com [NC]
RewriteRule ^(.*)$ https://api.example.com/en/$1 [R=301,L]

Error :

ERR_TOO_MANY_REDIRECTS

In the address bar I can see

http://api.example.com/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/

How I can solve this issue?


Solution

  • You need to check that the requested URL-path does not already start with /en/ or /ar/. For example:

    RewriteCond %{HTTP_HOST} ^api\.example\.com [NC]
    RewriteCond %{REQUEST_URI} !^/(en|ar)/
    RewriteRule ^(.*)$ https://api.example.com/en/$1 [R=301,L]
    

    OR,

    RewriteCond %{HTTP_HOST} ^api\.example\.com [NC]
    RewriteRule !^(en|ar)/ /en%{REQUEST_URI} [R=301,L]
    

    Aside: Since this is an "API", are requests expecting to have to follow redirects?