0

我有一个网站的 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;  
    }
4

1 回答 1

0

好的,既然你说它有效,让我解释一下你做了什么,我会从 wiki 页面引用它们:

首先你使用的标志是break

休息

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

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

另一个关键词是last

最后

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

这个告诉 nginx 停止重写并使用新的重写 URL 重新开始重写,例如,当您有某种短 URL 然后将其重写为更大的扩展 URL 时,这很有用,它还有另一个重写以提取参数并将它们发送到 php 引擎。

还有redirectpermanent但那些用于重定向。

您可以在rewrite doc page以及“过时”的 wiki 页面中阅读有关这些标志的更多信息,但我更喜欢它,因为它使用更简单的语言。

于 2013-09-12T13:53:08.783 回答