nginx 重写 uri 到文件

nginx rewrite uri to file

我需要 nginx 来通过 uri 打开文件,例如:

http://example.com/en/foo/test-bar 来自 /var/www/example.com/en_US/_foo_test_bar

http://example.com/en/foo2/test2-bar 来自 /var/www/example.com/en_US/_foo2_test2_bar

将除 letters/numbers 之外的所有符号替换为下划线。这个位置应该怎么看,使用重定向可能会更好?

location /en/ {
rewrite ...
}

我不知道 nginx 和正则表达式中这种机制的最佳实践。谢谢。

您可以使用rewrite递归更改符号,直到它们全部更改。假设真实文件在 en_US 下,如您的示例所示:

location /en/ {
    rewrite ^/en/(.*)[^A-Za-z0-9_](.*)$ /en/_ last;
    rewrite ^/en/(.*)$ /en_US/ last;
}
location /en_US/ {
    root /path/to/real/files;
}

第一个 rewrite 重复匹配,直到所有符号都被消耗完。第二个 rewrite 准备 URI 以提供真实文件。

有关更多信息,请参阅 this document