为什么我的NginX配置文件中的这一条重写规则会破坏我的网站?

时间:2017-08-24 08:32:05

标签: nginx

我正在尝试设置NginX重写规则,以便我可以使用以下网址:

http://example.com/xyz/

...并解析它,以便将xyz作为我可以在PHP中使用的变量的值。

我有这个重写规则:

rewrite ^/(.*)/ /index.php?var=$1 last;

然而,这似乎打破了我的网站。当站点首次加载时,URL只是http://example.com/,并且没有变量集,我的JavaScript或CSS文件都没有找到。如果我注释掉这一条重写行,那么我的网站就可以了。

如何设置重写规则,以便在未设置变量时不破坏我的网站? 请注意,var的值始终为三字母代码,如果这有助于限制它。

1 个答案:

答案 0 :(得分:1)

您的重写规则几乎匹配所有内容。任何带有第二个/(甚至不在末尾)的URI都符合您的规则。

您需要限制正则表达式以仅匹配您感兴趣的URI。

要匹配以/结尾的任何URI(例如/foo//foo/bar/),您需要$锚:^/(.*)/$

要仅匹配第一个路径元素(例如/foo/但不匹配/foo/bar),请使用排除/的字符类:^/([^/]*)/$

要匹配三个字母的代码,请使用\w匹配单词字符和{}语法来指示长度。如果正则表达式包含nginx个字符,则{}要求引用正则表达式:"^/(\w{3})/$"

在正则表达式上查看this useful resource