nginx 重写通配符未找到路径

nginx 重写通配符未找到路径

我正在尝试将 Apache .htaccess 配置转换为 nginx。以前的设置有大量重定向。其中大部分似乎都有效,但我被困在这一个上:

我有一个路径/support/,其中包含我想要的内容的索引,所以这很好用。我有一个/support/all/types/of/things指向其他域的各种列表——这些似乎也很好用。但是,我也需要一个/support/not-something-from-above重定向到特定域。

现在我有一个充满重写的位置块,如下所示:

location /support {
    rewrite /article/229/?$ https://something.com/entries/2180 redirect;
    rewrite /another/?$ https://something.com/elsewhere redirect;
    rewrite /.*$ https://what-i-want.com redirect;
}

该块中还有更多重写,但其想法是匹配支持下的各种路径,如果它们不对齐,则将它们发送到最后一个域。同时,保留 URL/support/作为我托管的 index.html

我努力了:

rewrite /\w+$ https://what-i-want.com redirect;
rewrite /.+$ https://what-i-want.com redirect;

我已将其移动到 /support/ 下其自己的位置块,并尝试了正则表达式匹配,但仍然不知所措。

作为参考,.htaccess 看起来像这样

RewriteRule ^support/dynamic/?$ https://something.com/entries/2180 [L,R=301,NC]
RewriteRule ^support/toolbar/?$ https://something.com/elsewhere [L,R=301,QSA]
RewriteRule ^support/.+$ https://what-i-want.com/ [L,R=301,NC]

答案1

您的正则表达式不够具体。例如/.+$matches /support

您可以使用rewrite...break来终止重写处理。请参阅这个文件了解详情。例如:

location /support/ {
    ...
    rewrite ^/support/$ /support/index.html break;
    return 302 https://what-i-want.com;
}

或者,使用精确匹配位置将某些 URI 从location /support/块中取出。请参阅这个文件更多信息。例如:

location /support/ {
    ...
}
location = /support/ {
    index index.html;
}
location = /support/index.html {
}

相关内容