Я пытаюсь настроить nginx для выполнения geoIP проверок на новых посетителях только.
Идея состоит в том, что новые посетители должны быть перенаправлены к версии страницы, которая была настроена для их языка/страны.
Я могу проверить, существует ли определенный cookie. Если это делает, то nginx может продолжиться и не перенаправить.
Это настроило средства, что все новые посетители будут перенаправлены к тому, что это, вероятно, будет самая соответствующая версия страницы для их страны/языка. И в то же время те пользователи, которые хотят, могут все еще просмотреть свободно все версии, доступные впоследствии.
Я полагаю, что Google рекомендует этот тип настроенных для многоязычных/многоузловых веб-страниц также.
Проблема состоит в том, что я получаю цикл перенаправления, если переписать директива помещается вне корневого местоположения. Все же, потому что американская версия совпадает с корнем/, переписывает в местоположениях, оказались еще более трудными настроить.
Значения geo_IP передаются хорошо через fastcgi к php, если не переписывают, указан, таким образом, я не думаю, что существует что-то не так с установкой кроме переписывания себя.
Это - моя конфигурация:
map $geoip2_data_country_code $country_url {
default example.com; ##This is the US version
GB example.com/uk;
CA example.com/ca;
}
server {
listen 443 ssl spdy default_server;
server_name example.com;
root /var/www/html;
if ($http_cookie !~ "cookie_to_check") {
rewrite ^ https://$country_url break;
#Appending $request_uri to the rewrite yields very similar results
}
location / {
try_files $uri $uri/ /index.php?$args;
}
location /uk {
try_files $uri $uri/ /uk/index.php?$args;
}
location /ca {
try_files $uri $uri/ /ca/index.php?$args;
}
##Other locations
}
Bir çox sınaq və səhvdən sonra bu, gözlənildiyi kimi işləyəcək və yerinə yetirəcək konfiqurasiyadır.
Əvvəlki versiyamda problem ikiqat idi:
Nginx, nginx arxasında bir php tətbiqi ilə təyin olunan bir çərəzin mövcudluğunu yoxlayır. Bunu göstərdiyinə görə @AlexeyTen-ə təşəkkür edirəm. Şərti olaraq nginx ilə əlavə bir çerez qurmaq hiylə yaratdı
map $ geoip2_data_country_code $ country_url {
default example.com; ## Bu ABŞ versiyasıdır
GB example.com/uk;
CA example.com/ca;
}
server {
443 ssl spdy default_server qulaq asın;
server_name example.com;
root / var / www / html;
yer / {
try_files $ uri $ uri / /index.php?$args;
əgər ($ http_cookie! ~ "country = set") {
add_header Set-Cookie "ölkə = dəst; Maksimum Yaş = 31536000";
^ $ sxemini yenidən yazın: // $ country_url $ request_uri break;
}
}
yer / uk {
try_files $ uri $ uri / /uk/index.php?$args;
əgər ($ http_cookie! ~ "country = set") {
add_header Set-Cookie "ölkə = dəst; Maksimum Yaş = 31536000";
^ $ sxemi yenidən yaz: // $ country_url $ request_uri break;
}
}
yer / ca {
try_files $ uri $ uri / /ca/index.php?$args;
əgər ($ http_cookie! ~ "country = set") {
add_header Set-Cookie "ölkə = dəst; Maksimum Yaş = 31536000";
^ $ sxemi yenidən yaz: // $ country_url $ request_uri break;
}
}
## Digər yerlər
}