【发布时间】:2015-08-12 17:29:19
【问题描述】:
我无法理解在 Nginx 中使用正则表达式和提取变量。
我想将所有文件请求写入特定目录路径中包含单词/development/ 的文件。
/development/1.1000038/assets/css/something.css
应该返回文件:
/usr/share/nginx/html/public_html/assets/css/something.css
还有:
/development/1.1000038/assets/js/something.js
应该返回文件:
/usr/share/nginx/html/public_html/assets/js/something.js
等等……
只要存在/development/,传入请求的 URL 结构将始终相同。即/development/ 然后/(version_number)/ 最后是我希望使用的 URL 的实际部分。
我似乎能够匹配和拦截任何带有单词 /development/ 的传入请求,但在提取和使用 URL 的其余部分时遇到问题。
任何帮助将不胜感激。
编辑:
这是我尝试过的:
location ~ /development/(.*?)/(.*) {
try_files /usr/share/nginx/html/public_html/$2 /dev/null;
}
我的想法是我应该匹配/development/ 部分。带有(.*?) 的版本号,然后是带有最终(.*) 的URL 的其余部分
然后我假设我可以只使用 $2 变量并在我的 try_files 指令中使用它。不幸的是,这似乎不起作用。
我也尝试过匹配并使用我真正需要的部分:
location ~ /development/[A-Za-z0-9\.]+/(.*) {
try_files /usr/share/nginx/html/public_html/$1 /dev/null;
}
我对正则表达式一点也不擅长,但在我使用的在线测试仪中,它们似乎与 URL 的正确部分匹配。
【问题讨论】:
-
您在匹配整个 URL 或只是替换时遇到问题?如果是第二件事,您应该编辑您的问题并发布您的尝试。
-
按要求编辑...
标签: regex nginx url-rewriting