单独的Nginx重写

时间:2013-09-11 19:56:57

标签: nginx rewrite

我有2个网站的副本。他们使用相同的重写规则。其中一个站点是另一个站点内的子目录。我想知道如何在进入子目录并使用这些规则之前我可以检查nginx如何使用通用规则

这是我的nginx.conf

location /rock/ {
      rewrite ^/(|/)$ /rock/index.php?request=$1;
      rewrite ^/([a-zA-Z0-9/_-]+)(|)$ /rock/index.php?request=$1;  
    }
location / {
      rewrite ^/(|/)$ /index.php?request=$1;
      rewrite ^/([a-zA-Z0-9/_-]+)(|)$ /index.php?request=$1;  
    }

1 个答案:

答案 0 :(得分:0)

好的,因为你说它有用,让我解释一下你做了什么,我会从维基页面引用它们:

首先使用的标志是break

<强>断裂

  

完成当前重写指令的处理,并且仅在当前位置块内继续进行非重写处理。

通过将关键字break添加到任何重写规则,它告诉nginx停止重写,所以即使它匹配另一个有重写的位置,它也不会运行它,这就是为什么它没有执行重写位置location / { .. }

另一个关键字是last

过去

  

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

这个告诉nginx停止重写并重新使用新的重写URL重新编写,这在你有某种短URL的情况下很有用,例如然后它被重写为更大的扩展URL,它还有另一个重写提取参数并将它们发送到php引擎。

还有redirectpermanent,但这些用于重定向。

您可以在the rewrite doc pagethe wiki page中了解更多有关这些标志的内容,这些标志是“过时的”,但我更喜欢它,因为它使用的是更简单的语言。