Мультирегион/многоязычный веб-сайт с Cloudflare и Nginx

#nginx #redirect #http-headers #cloudflare #region

Вопрос:

Я хочу создать сайт, на котором (для начала) домен и текст дома будут меняться в зависимости от страны посетителя.

Я хотел бы знать, правильна ли моя логика/способ или есть лучший способ сделать это, чтобы использовать только 2 файла (index.php и home.php)

Итак, в моем index.php Я определяю ip/страну с помощью Cloudflare

($country_code = $_SERVER["HTTP_CF_IPCOUNTRY"];

После этого я делаю перенаправление на поддомен :

 if ($country_code=="FR") {
        header('Location:https://fr'.$_SERVER["HTTP_HOST"].')
}
if ($country_code=="DE") {
        header('Location:https://de'.$_SERVER["HTTP_HOST"].')
}
ETC
 

Затем я использую nginx, чтобы поймать эти поддомены (которые я сначала настроил в Cloudflare), и я указываю всем им на одно и то же home.php

Так что, наконец, в моем home.php Я отображаю текст/язык в зависимости от страны , но посетитель, в зависимости от его страны, будет на fr.example.com , de.example.com , и т. д

Это нормально, или я должен сделать это по-другому ?

Комментарии:

1. Что произойдет, если кто-то из Германии посетит: https://fr.example.com/home.php ?

2. Спасибо за вопрос! Не думал об этой возможности , но так как я все равно зарегистрируюсь home.php для страны, чтобы отобразить правильный язык, если я увижу, что поддомен и страна не совпадают, я бы спросил посетителя, хочет ли он изменить свою страну.

Ответ №1:

Я думаю, что это сработает, вам просто нужно добавить «нет прямого доступа» к этим поддоменам «https://fr.example.com/»

 if ($country_code=="FR") {
        header('Location:https://fr'.$_SERVER["HTTP_HOST"].')
}
if ($country_code=="DE") {
        header('Location:https://de'.$_SERVER["HTTP_HOST"].')
}