我正在尝试设置NginX重写规则,以便我可以使用以下网址:
...并解析它,以便将xyz
作为我可以在PHP中使用的变量的值。
我有这个重写规则:
rewrite ^/(.*)/ /index.php?var=$1 last;
然而,这似乎打破了我的网站。当站点首次加载时,URL只是http://example.com/
,并且没有变量集,我的JavaScript或CSS文件都没有找到。如果我注释掉这一条重写行,那么我的网站就可以了。
如何设置重写规则,以便在未设置变量时不破坏我的网站?
请注意,var
的值始终为三字母代码,如果这有助于限制它。
答案 0 :(得分:1)
您的重写规则几乎匹配所有内容。任何带有第二个/
(甚至不在末尾)的URI都符合您的规则。
您需要限制正则表达式以仅匹配您感兴趣的URI。
要匹配以/
结尾的任何URI(例如/foo/
和/foo/bar/
),您需要$
锚:^/(.*)/$
要仅匹配第一个路径元素(例如/foo/
但不匹配/foo/bar
),请使用排除/
的字符类:^/([^/]*)/$
要匹配三个字母的代码,请使用\w
匹配单词字符和{}
语法来指示长度。如果正则表达式包含nginx
个字符,则{}
要求引用正则表达式:"^/(\w{3})/$"
在正则表达式上查看this useful resource。