Nginx路径文件夹重写

out*_*olf 1 http nginx

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

由此:

/assets/sites/fpi/css/reset.css
Run Code Online (Sandbox Code Playgroud)

对此:

/assets/sites/default/css/reset.css
Run Code Online (Sandbox Code Playgroud)

我的规则看起来像这样:

rewrite ^/assets/sites(.+)$ /assets/sites/default/$1 last;
Run Code Online (Sandbox Code Playgroud)

/**更新**/

感谢目前为止提供的有用答案.我想要一种更通用的方法来定位URL路径的"fpi"部分.

就像是:

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

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

<pre>
/assets/sites/fpi/css/reset.css
/assets/sites/gbc/css/reset.css
/assets/sites/ekg/css/reset.css
</pre>
Run Code Online (Sandbox Code Playgroud)

会转移到:

<pre>
/assets/sites/default/css/reset.css
/assets/sites/default/css/reset.css
/assets/sites/default/css/reset.css
</pre>
Run Code Online (Sandbox Code Playgroud)

谢谢

Séb*_*uld 5

而不是last,使用break,redirectpermanent.差异很微妙:

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

permanent个人主张.为访问者提供缓存CSS样式表的机会.


Mel*_*vyn 5

你的正则表达式与你的规范不符.用这个:

rewrite ^(/assets/sites)/fpi/(.*)$ $1/default/$2 last;
Run Code Online (Sandbox Code Playgroud)

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