Nginx循环定向问题??

发布于 2022-09-06 11:17:34 字数 1126 浏览 22 评论 0

问题

nginx.conf

location / {
    try_files $uri $uri/ /index.php$is_args$args;
}

location ~ \.php$ {
    fastcgi_pass   php:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

location ~ ^/(test|admin) {
    rewrite ^(.*) $uri.php$is_args$args;
}

想把account|admin开头的请求后面加个.php后缀(兼容老系统),问题是访问这些目录时出现

500 Internal Server Error,看日志是循环定向问题
路径/test/game.php应该会被上一个location处理吧,看来学艺不精。。。

Nginx官方location优先顺序

Directives with the = prefix that match the query exactly. If found, searching stops.
All remaining directives with conventional strings, longest match first. If this match used the ^~ prefix, searching stops.
Regular expressions, in order of definition in the configuration file.
If #3 yielded a match, that result is used. Else the match from #2 is used.
=前缀的指令严格匹配这个查询。如果找到,停止搜索。
所有剩下的常规字符串,最长的匹配。如果这个匹配使用^〜前缀,搜索停止。
正则表达式,在配置文件中定义的顺序。
如果第3条规则产生匹配的话,结果被使用。否则,使用第2条规则的结果。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

×纯※雪 2022-09-13 11:17:34

自己解决了哦,去掉$is_args$args就好了,因为rewrite重写的是$uri:

location ~ ^/(test|admin) {
    rewrite ^(.*) $uri.php;
}

真是不仔细看文档

Syntax:    rewrite regex replacement [flag];
Default:    —
Context:    server, location, if

If the specified regular expression matches a request URI, URI is
changed as specified in the replacement string. The rewrite directives
are executed sequentially in order of their appearance in the
configuration file.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文