Nginx重定向所有索引

时间:2019-01-25 13:42:42

标签: nginx

我们最近将不同语言的页面移到了我们网站上的文件夹中。

例如。

example.com/uk
example.com/de
example.com/ie

当用户登陆example.com时,会看到一个页面来选择他们的语言。

出于搜索引擎优化/书签的目的,我希望将访问前一页的所有访问量重定向到英国版本。

例如

example.com/page1.php

将重定向到

example.com/uk/page1.php

但是与此同时,example.com根目录上的所有语言都将显示为语言选择器。

有什么想法吗?

谢谢

1 个答案:

答案 0 :(得分:0)

晚些时候参加聚会,但是我想我可以为将来的来访者解答。我的例子是这样的:

在为我们的业务添加新的行业后,我们将域移到了子域。这是一个NextJS SPA应用程序。条件是,对https://example.com的任何请求都应被路由到https://subdomain.example.com,但与此同时,我们必须在https://example.com上显示主页。为了实现这一点,因为nginx按照添加位置块的顺序应用逻辑,所以我必须按以下顺序应用逻辑:

  1. 将索引路由到正确的位置

        location / {
    
            root /home/ubuntu/projects/tbs/front-end/home-page/;
            index index.html index.htm index.nginx-debian.html;
    }
    
  2. 由于我们的结构是这样的:https://subdomain.example.com/my-product-name-and-some-random-text,其中带有连字符的任何内容都可能是产品标签,因此我必须确保在检查产品之前,我们必须将任何其他网址重定向到各自的网址页面。位置块为:

        location /products {
            return 301 https://subdomain.example.com$request_uri;
    }
        location /about {
            return 301 https://subdomain.example.com$request_uri;
    }
        location /contact {
            return 301 https://subdomain.example.com$request_uri;
    }
    
  3. 最后,我们必须添加一个正则表达式以使用连字符来路由其他任何东西,并假定它是一个产品

    location ~ ^/([a-zA-Z0-9]*-[a-zA-Z0-9]*)+$ {
            return 301 https://subdomain.example.com$request_uri;
    }
    

    我确信可能会有比我们使用的解决方案更好的解决方案,但是考虑到我们对nginx的经验较少,这是一个很好的解决方法。如果有人有更好的解决方案,我很想听听,以便我们可以采取更好的方法。