静态网站的每种语言的目录中都有html文件http://example.com/en 例如位置 / en /(英语) / es /(西班牙语) 静态文件包括将CSS定向到网站根目录, /en/css/style.css->定向到/css/style.css
location ~ "^/en/(img|js|css)" {
rewrite ^/en(.*)$ $1 last;
}
location ~ "^/es/(img|js|css)" {
rewrite ^/es(.*)$ $1 last;
}
如果我现在想添加40种语言,我必须在上述位置重复40次,我该如何做,这样我就不必为每种语言代码重复该位置, 是否可以捕获/ two lang语言代码/并在重写中重复使用?
非常感谢!
答案 0 :(得分:1)
您不能在location
语句中使用捕获来构造rewrite
语句中的正则表达式。正则表达式是文字,不能使用变量构造。
但是,您不需要...
在rewrite
块内的location
语句中只能看到前两个/
之间的值应被忽略的URI。
例如:
location ... {
rewrite ^/[^/]+(/.*)$ $1 last;
}
如果所有语言代码都为两个字符长,则可以使用以下方法进一步概括:
location ~ "^/[a-z]{2}/(img|js|css)" {
rewrite ^/[^/]+(/.*)$ $1 last;
}
但是,还有许多其他可行的解决方案。如果这些是静态文件,则rewrite
可能是不必要的,例如:
location ~ "^/[a-z]{2}(/(img|js|css).*)$" {
try_files $1 =404;
}