5

我的 URL 看起来像这样:

https://some_sub_domain.whatever.com

这需要重定向到:

https://some-sub-domain.whatever.com

我不知道子域将是什么(它们是用户名)。

虽然我需要替换子域的下划线,但我需要保留其他下划线:

https://some_sub_domain.whatever.com/hey_there_underscore

应该重定向到:

https://some-sub-domain.whatever.com/hey_there_underscore
4

2 回答 2

6

这是一种通过lua重写的方法:

location / {
  rewrite_by_lua '
  if string.find(ngx.var.host, "_") then
    local newHost, n = ngx.re.gsub(ngx.var.host, "_", "-")
    ngx.redirect(ngx.var.scheme .. "://" .. newHost .. ngx.var.uri)
  end
  ';
  proxy_pass       http://my_backend;
  proxy_set_header Host $host;
}
于 2013-01-29T04:48:29.020 回答
0

假设用户名中没有'.',您可以使用正则表达式:

(https?://)([a-zA-Z0-9_]+)(\..*)

并使用第二个分组调用一个简单的替换。使用 perl 模块 favouretti 建议这样做应该可以正常工作,但坦率地说,我没有足够的 nginx 或 perl 模块经验来做到这一点。

于 2013-01-29T03:33:11.040 回答