mrm*_*rm8 5 nginx directory redirect subdomain
我正在尝试将子文件夹重定向到 nginx 中的子域。我希望http://example.com/~meow/被重定向到http://meow.example.com/。我尝试了以下方法:
location ~ ^/\~meow/(.*)$ {
rewrite ^(.*)$ http://meow.example.com$1 permanent;
}
Run Code Online (Sandbox Code Playgroud)
但它不起作用。它被我的用户目录的位置块捕获:
location ~ ^/~([^/]+)/(.+\.php)$ {
[...]
}
and
location ~ ^/\~([^/]+)/(.*)$ {
[...]
}
Run Code Online (Sandbox Code Playgroud)
那么,我该怎么做呢?哦,我只想 /~meow/ 被重定向。不应更改所有其他用户目录。
对于您的要求,静态位置会更有效。如果您阅读http://wiki.nginx.org/HttpCoreModule#location 上的四个规则,您将看到 ^~ 位置不会被正则表达式位置覆盖。您似乎还想在重定向时去除前导 /~meow。正确的做法是:
location ^~ /~meow/ {
rewrite ^/~meow(.*) http://meow.example.com$1 permanent;
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,重写时没有理由捕获整个 uri。当前 uri 已经保存在 $uri 中。
rewrite ^(.*)$ http://meow.example.com$1 permanent;
Run Code Online (Sandbox Code Playgroud)
和
rewrite ^ http://meow.example.com$uri permanent;
Run Code Online (Sandbox Code Playgroud)
将始终产生相同的结果,第二次重写效率更高,因为它是一个短路匹配,并且已经包含您无论如何要捕获的内容。
你可以尝试location
像这样使用嵌套
location ~ ^/\~([^/]+)/(.*)$ {
location ~ ^/\~meow/(.*)$ {
rewrite ^(.*)$ http://meow.example.com$1 permanent;
}
[...]
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5959 次 |
最近记录: |