NGINX子目录重定向无效

时间:2017-05-26 19:15:59

标签: nginx url-redirection nginx-location

TLDR: subdirectory/cool重定向到newdirectory/coolsubdirectory?cool在没有参数的情况下错误地重定向到newdirectory

问题:

我正在尝试将子目录重定向到新目录,同时使用正则表达式~* ^(?:((\/m\b)(?!-)(\/)?))(?<requestedPath>.*)?$

通过NGINX位置保留原始网址参数

/subdirectory/cool等路径成功重定向到/newdir/cool。但是,/subdirectory?cool/subdirectory/?cool等路径会重定向到/newdir,而不会保留网址参数。

重定向的工作原理如下:

  • /子目录 - &gt; / newdir

    (我在这里发布的有关子目录重定向的许多建议都假定尾随slas 没有考虑到他们的/ m的正则表达式也影响/媒体)

    < / LI>
  • /子目录/ - &gt; / NEWDIR /
  • /子目录/ test - &gt; / NEWDIR /测试
  • /子目录/?apple - &gt; / NEWDIR /?苹果
  • /子目录?apple - &gt; / NEWDIR?苹果

此处的测试成功:Successful Test

失败的代码:

location ~* ^(?:((\/subdirectory\b)(?!-)(\/)?))(?<requestedPath>.*)?$ {
        return 301 /newdir/$requestedPath;
}

此外,我也尝试使用重写而不是位置无济于事。

1 个答案:

答案 0 :(得分:0)

显然,有了位置,我们需要$is_args

这就是诀窍:return 301 /newdir/$requestedPath$is_args$args;

最终结果:

location ~* ^(?:((\/subdirectory\b)(?!-)(\/)?))(?<requestedPath>.*)?$ {
        return 301 /newdir/$requestedPath$is_args$args;
}