nginx将uri重写为文件

时间:2016-11-23 12:10:12

标签: regex redirect nginx url-rewriting nginx-location

我需要nginx来打开uri之类的文件:

来自/var/www/example.com/en_US/_foo_test_bar的

http://example.com/en/foo/test-bar

来自/var/www/example.com/en_US/_foo2_test2_bar的

http://example.com/en/foo2/test2-bar

替换除字母/数字之外的所有符号以加下划线。怎么看这个位置,可能会更好用的是重定向?

location /en/ {
rewrite ...
}

我不知道nginx和regexp中这种机制的最佳实践。谢谢。

1 个答案:

答案 0 :(得分:0)

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

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

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

有关详情,请参阅this document