伊芙西维尔 (https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/)

伊芙西维尔 (https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/)

如何对单个根目录和 url 进行动态路径路由请求/<country_zone>/<actual_url>/*

我能够检索$country_zone以下任意值(in|uk|us|other)使用 geoip 模块。

例如

Request => Response 
/ => /
/ (with geoip country as US) => /us/
/path/ => /path
/path/ (with geoip country as US) => /us/path/
/us/path/ => /us/path/
/us/path/ (with geoip country as US) => /us/path/
/in/* => /*

我的代码库位于:/var/www/html(所有路线都应将其视为 / 之后的根目录

我当前的 nginx 配置:

server {
    listen 80 default_server;
    listen [::]:80 default_server;


    root /var/www/html;

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html;
    server_name _;

    location  ~  ^/$country_zone {
        alias /var/www/html;
        index index.html index.htm index.nginx-debian.html;
        break;
    }

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.

        if ($country_zone != in) {
                return 307 /$country_zone;
        }

        add_header X_COUNTRY_ZONE_ID $country_zone;
        try_files $uri $uri/ =404;
    }


}

PS:有一天我也将把请求代理到另一台服务器

答案1

伊芙西维尔 (https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/

您的解决方案对我来说还不错。老实说,我不知道那里出了什么问题。

我宁愿编写应用程序来识别用户浏览器的默认语言并显示网站或根据该语言进行路由。至少我们就是这么做的。URL 始终相同,除了紧接着主域名的地方,您可以像预期的那样看到国家代码。

相关内容