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>
由于
答案 0 :(得分:5)
使用last
,break
或redirect
,而不是permanent
。差异很微妙:
break
的规则,则会导致忽略任何后续重写规则。 与last
不同,此处不会处理其他重写规则,并且规则无法自行重新评估。我个人主张permanent
。让访问者有机会缓存CSS样式表。
答案 1 :(得分:5)
您的正则表达式与您的规格不符。使用此:
rewrite ^(/assets/sites)/fpi/(.*)$ $1/default/$2 last;
示例中的正则表达式使用fpi。
答案 2 :(得分:0)
来自文档:
重写最后 - 完成当前重写指令的处理并重新启动 搜索URI匹配的过程(包括重写) 来自所有可用的地点。
您重写的网址将匹配正在匹配的模式,因此会不断重写。
您应该将匹配器(或重写的路径)更改为不再匹配。