我正在尝试将 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 {
}