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