我需要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中这种机制的最佳实践。谢谢。
答案 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。