【问题标题】:Use variable inside regex rewrite test on nginx在 nginx 上使用正则表达式重写测试中的变量
【发布时间】:2012-11-24 12:59:25
【问题描述】:

我有一个在 nginx 上运行的 Wordpress 多站点网络。我正在尝试使用 w3 总缓存设置缓存。我有 99% 的情况,但我只是坚持一个规则。

我发现 some instructions 指出了这个重写规则,用漂亮的 URL 重写缩小的 css 和 js 文件:

# Rewrite minified CSS and JS files
location ~* \.(css|js) {
    if (!-f $request_filename) {
        rewrite ^/wp-content/w3tc/min/(.+\.(css|js))$ /wp-content/w3tc/min/index.php?file=$1 last;
    }
}

我这样修改它以在我的多站点环境中工作:

rewrite ^/wp-content/w3tc-$host/min/(.+\.(css|js))$ /wp-content/w3tc-$host/min/index.php?file=$1 last;

但是我发现测试并没有解释$host 变量,而是实际测试字符串"$host"。有没有办法在测试中实际使用$host 变量的值?或者,使用一般规则是否是个好主意,例如:

rewrite ^/wp-content/w3tc-.*?/min/(.+\.(css|js))$ /wp-content/w3tc-$host/min/index.php?file=$1 last;

我愿意接受更好的建议 - 正则表达式对我来说不是一个强项。

最后,对于任何寻找替代答案的人:只需在缩小设置中禁用 “重写 URL 结构” 即可使缩小工作。这纯粹是为了缩小文件的漂亮 URL。

【问题讨论】:

  • 自己寻找解决方案。就我的研究而言,每当在配置时编译正则表达式时,nginx 都会在运行时完成变量插值。所以没有快乐。寻找解决方法...
  • 如果您最终找到了答案,请告诉我。到目前为止,我已经放弃了,因为它确实适用于丑陋的 URL。这对于 CSS/JS 文件来说已经足够好了。
  • 这里也放弃了,好像从来没有实现过。也许有一天会有一个自定义模块,现在回到模板配置。

标签: regex nginx rewrite


【解决方案1】:

变量插值在重写正则表达式中不可用。我会使用类似的东西:

rewrite ^/wp-content/w3tc-(.*?)/min/(.+\.(css|js))$ /wp-content/w3tc-$1/min/index.php?file=$2 last;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-20
    • 1970-01-01
    相关资源
    最近更新 更多