Redirect by browser language

Hi guys,
I’m trying to setup a redirect based on the language of the browser, tried a lot of variations but can’t find the correct syntax.

Here is my actual entry in the _redirects file:

/ https://wwww.evlaser.it 302 Language=it

What I’m expecting is:
If my language is italian,then redirect me to evlaser.it from every url.

site: https://www.evlaser.com

Thanks a lot!

Hi Federico and sorry to hear about the trouble! First off, I don’t see that redirect on that site - there are about 40 non-language 301 redirects like this:

"/prodotti/ev-smart-2/" to "/prodotti"

so, either you removed it, or you are not deploying what you think you are.

Next up, with that configuration, you’ll redirect ONLY the main page and ONLY if you DON’T have an index.html so I think that is probably not what you want :slight_smile: If you want all URLs to redirect regardless of what content is on the english language site, you want something more like this:

/* https://www.evlaser.it/:splat 302! Language=it

or if you really do want to redirect just the landing page, you still need the ! (cf https://docs.netlify.com/routing/redirects/rewrites-proxies/#shadowing):

/ https://www.evlaser.it/ 302! Language=it

If you give that a try and it doesn’t work, let me know!

That will cause all pages, even ones

Hi fool! thanks for the reply.
I had the rules inside the _redirects file.

Now I’ve placed your examples inside the netlify.toml file but during build it gives me this error:

Invalid netlify.toml file: Error while decoding file /opt/build/repo/netlify.toml: Near line 1 (last key parsed ‘’): bare keys cannot contain ‘/’

I’m a bit confused now in which syntax is correct for the netlify.toml file, I’ve also tried:

[[redirects]]
from = "/"*
to = “https://www.evlaser.it/:splat
status = 302
force = true
conditions = {Language = “it”}

with no luck, I get this error during the build:
Invalid netlify.toml file: Error while decoding file /opt/build/repo/netlify.toml: toml: cannot load TOML value of type string into a Go slice

The examples that @fool mentioned is for the _redirects file. Those examples will need to be converted to the structured format if you want to use them in your netlify.toml file.
This is how the redirect should look like:

[[redirects]]
from = "/*"
to = “https://www.evlaser.it/:splat”
status = 302
force = true
conditions = {Language = [“it”]}

For reference, this is mentioned in our netlify.toml reference doc.

Thanks @Dennis, now I don’t get the errors on build anymore, which is nice.
But still, no redirect is happening.

It works only if I use the country condition, not the language ones.

Hi @federicovezzoli can you please provide a link to the deploy that you are testing and the URL that you are testing with? Also does your browser have multiple languages set? Can you test with sending a single language and let me know if that works? Note that I don’t believe people should limit the number of languages, this is for debugging purposes.

I can confirm, that a simple lang redirect form root is not working:
/ /de/ 301 Language=de
/ /es/ 301 Language=es
/ /en/ 301

This ALWAYS redirects to /en and never matches the languages.
Any idea ?

Hi @derhaeuptling.com, I think you asked about this in another thread already, and I asked you for more info there :wink:

Hi @futuregerald or @Dennis ! I was wondering if it would be possible to do something like:
[[redirects]]
from = “/*”
to = “/fr/maintenance”
status = 302
force = true
conditions = {Language = [“fr”]} /

[[redirects]]
from = “/*”
to = “/nl/maintenance”
status = 302
force = true
conditions = {Language = [“!fr”]} // All languages except fr

But I guess these above would be conflicting? (at least it didn’t work)

Using a bang (!) is not supported. However, since our system parses redirect rules from top to bottom (cascading), the second redirect rule doesn’t have to have the Language conditions since any ‘fr’ requests will never reach that redirect. Essentially, the more specific rules (like that ‘fr’ language redirect) should be on the top of the file. Let me know if that makes sense.