ran*_*alt 10 nginx regex redirect 301-redirect
我有一个很长的域名,所以我决定把它改成一个更短、更友好的域名。但是由于我有很多子域(实际上,我有一个子域通配符),我想保留子域,同时只更改域部分。所以,我制定了以下规则:
server {
listen 80;
server_name ~^(\w+)\.olddomain\.com$;
rewrite ^ $scheme://$1.doma.in$request_uri? permanent;
}
Run Code Online (Sandbox Code Playgroud)
我已经阅读了很多其他问题,这个片段解决了这个问题。但是对我来说,Nginx 总是重定向到.domain.in,没有任何子域。我错过了什么?我已经针对 regex101 测试了正则表达式并且示例工作正常,Nginx 似乎无法重定向它。
kri*_*sFR 23
由于 nginx 0.8.25 命名捕获可以在 server_name 中使用。你应该使用它们。
在这里,子域将存储在一个名为$sub. 然后您将能够在rewrite指令中重用它:
server {
listen 80;
server_name ~^(?<sub>\w+)\.olddomain\.com$;
rewrite ^ $scheme://$sub.doma.in$request_uri? permanent;
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以保留实际的 Regex 并$1在return指令中使用:
server {
listen 80;
server_name ~^(\w+)\.olddomain\.com$;
return 301 $scheme://$1.doma.in$request_uri;
}
Run Code Online (Sandbox Code Playgroud)
最后,请注意该return指令是重定向的最佳方法。您可能会遇到使用重定向的陷阱rewrite。
| 归档时间: |
|
| 查看次数: |
16509 次 |
| 最近记录: |