Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

apache2 mod_rewrite based on language then proxy

I am trying to redirect a user that visits www.server.com to the browser's preferred language setting.

When a user types in www.server.com/<lang>, /es for spanish in the case below, they are correctly proxied to the smartling translation servers. However, when a user has their language preference set in their browser, they experience a redirect loop.

I have the following config:

<VirtualHost *:8008>
        ServerName www.server.com
        ServerAlias www

        ProxyPreserveHost On

        RewriteEngine On

        RewriteCond %{HTTP:Accept-Language} ^es [NC]
        RewriteRule ^/$ es/ [R=301,L]

      <Proxy http://server.sl.smartling.com/*>
          Allow from all
      </Proxy>

      <LocationMatch "/es">
          ProxyPass http://server.sl.smartling.com/es
          ProxyPassReverse http://server.sl.smartling.com/es
          Header add Host "www.server.com"
          RequestHeader set Host "www.server.com"
      </LocationMatch>

  DocumentRoot /www
  <Directory /> 
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride all
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/www-error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/www-access.log combined

</VirtualHost>

I've tried stopping the loop with additional RewriteCond but can't seem to get it right. Any suggestions appreciated.

Thanks

like image 408
smd1000 Avatar asked Sep 29 '22 05:09

smd1000


1 Answers

You'll need to add another condition to negate the locale condition. The locale condition will always be true if it is set in the user's browser. Try adding a condition like this

RewriteCond %{REQUEST_URI} !^/es
like image 135
Greg Jones Avatar answered Oct 05 '22 07:10

Greg Jones