2

Nginx 中的简单路径重写,我无法让它工作。

由此:

/assets/sites/fpi/css/reset.css

对此:

/assets/sites/default/css/reset.css

我的规则如下所示:

rewrite ^/assets/sites(.+)$ /assets/sites/default/$1 last;

/** 更新 **/

感谢您迄今为止提供的有用答案。我想要一种更通用的方法来定位 URL 路径的“fpi”部分。

就像是:

<pre>
rewrite ^(/assets/sites)/\w*/(.*)$ $1/default/$2 last;
</pre>

这将匹配该部分的任何部分,因此所有匹配此模式的 url:

<pre>
/assets/sites/fpi/css/reset.css
/assets/sites/gbc/css/reset.css
/assets/sites/ekg/css/reset.css
</pre>

将转移到:

<pre>
/assets/sites/default/css/reset.css
/assets/sites/default/css/reset.css
/assets/sites/default/css/reset.css
</pre>

谢谢

4

3 回答 3

5

代替last,使用breakredirectpermanent。差异很微妙:

  • break将停止处理当前位置块的重写规则,这意味着您将摆脱重写无限循环。但是,如果触发了 - 包含规则,它将导致任何后续重写规则被忽略break与 不同last的是,不会从那里处理其他重写规则,并且该规则不能自行重新评估
  • 永久允许您立即执行 301 HTTP 重定向(即,它永远位于此地址!)。这对于搜索引擎和浏览器缓存特别有用,以允许缓存和更少的资源分配(= 更少浪费的带宽)
  • 重定向与永久相同,但使用 302 代替(我暂时移动了)。不太好。

permanent个人提倡。让您的访问者有机会缓存​​ CSS 样式表。

于 2013-04-19T22:32:11.100 回答
5

您的正则表达式与您的规范不匹配。用这个:

rewrite ^(/assets/sites)/fpi/(.*)$ $1/default/$2 last;

示例中的正则表达式带有 fpi。

于 2013-04-22T06:45:13.903 回答
0

从文档中:

rewrite last - 完成当前重写指令的处理并重新启动该过程(包括重写),并从所有可用位置搜索 URI 上的匹配项。

您重写的 URL 将匹配正在匹配的模式,因此它将不断重写它。

您应该更改匹配器(或重写的路径)以不再匹配它。

于 2013-04-19T22:24:51.367 回答