【问题标题】:Redirect domain to default language NGINX将域重定向到默认语言 NGINX
【发布时间】:2020-04-09 01:52:04
【问题描述】:

为了 301 重定向 site.comsite.com/ensite.com/my-pagesite.com/en/my-page 苦苦挣扎了这么久

我设法使第一个重定向工作,但不是第二个!也可以对两者都使用一个规则吗?那么我的第二条规则有什么问题呢?

rewrite "^/(?![a-z]{2}|[a-z]{2}-[a-z]{2})$" /en redirect;
rewrite "^/(?![a-z]{2}|[a-z]{2}-[a-z]{2})/(.*)$" /en/$2 redirect;

非常感谢。

【问题讨论】:

    标签: regex nginx url-rewriting


    【解决方案1】:

    第二个正则表达式中没有 2 个捕获组,只有一个。第一对括号是一个负前瞻,它不会创建捕获组。这就是为什么您不能在重定向中使用 $2 的原因。

    更新

    此重定向应替换您的两条规则:

    rewrite "^((?!/([a-z]{2}|[a-z]{2}-[a-z]{2})(/|$)).*)$" /en$1 last;
    

    【讨论】:

    • 感谢亚历克斯的回答。我刚试过你的代码,但它不起作用,页面没有加载,我的笔记本电脑的风扇开始旋转......当我点击“停止”按钮时,它会在末尾附加一个“en”(site. com/en/en)
    • 还是同样的问题:/
    【解决方案2】:

    我认为您可以通过定义相关位置来从另一个角度处理它,例如:

    location / {
        return 301 /en$request_uri;
    }
    
    location = /my-page {
        return 301 /en/my-page;
    }
    
    location /en/ {
       ...
    }
    
    

    【讨论】:

    • 嗨,丹妮拉,感谢您的回答。 /my-page 可以是其他任何网址,是否可以使其动态化?
    • 当我转到site.com 时,它会重定向到site.com/en/en/en/en/en/en/en/en/en/ :(
    • 这可能意味着/en/位置没有添加,你添加了吗?它可以像location /en/ { } 一样为空。这个想法是 NGINX 无论如何都会选择一个位置。
    • 我添加了它,但页面没有重新加载,并且似乎它消耗了太多 CPU,我的粉丝开始旋转 :( 我不知道 nginx 更复杂,这是我可以在 . htaccess!!
    猜你喜欢
    • 2019-11-09
    • 1970-01-01
    • 2019-12-31
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多