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。
我需要 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。