Nginx路径文件夹重写

时间:2013-04-19 16:08:16

标签: http nginx

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>

哪个匹配该部分的任何部分,以便匹配此模式的所有网址:

<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>

由于

3 个答案:

答案 0 :(得分:5)

使用lastbreakredirect,而不是permanent。差异很微妙:

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

我个人主张permanent。让访问者有机会缓存​​CSS样式表。

答案 1 :(得分:5)

您的正则表达式与您的规格不符。使用此:

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

示例中的正则表达式使用fpi。

答案 2 :(得分:0)

来自文档:

  

重写最后 - 完成当前重写指令的处理并重新启动   搜索URI匹配的过程(包括重写)   来自所有可用的地点。

您重写的网址将匹配正在匹配的模式,因此会不断重写。

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