fix-nginx-server-name-redirect
告别内外链误判!解析Nginx中$_SERVER['SERVER_NAME']因重定向域名顺序导致的返回值错误,手把手教你通过宝塔面板调整server_name配置,快速修复内外链判断问题。
views
| comments
通常来说,网站会通过判断内容中的链接是内链(指向同一网站内其他页面的链接,即相同域名或在允许的域名列表中)还是外链(指向非本网站域名的链接,即域名不在白名单中)来采取不同的处理方式。在代码中,判断内外链的常见方法是:$host = $_SERVER['SERVER_NAME'];
然而,当使用 Nginx 服务器时,可能会出现 $_SERVER['SERVER_NAME'] 返回值不为预期的主机域名的情况,这是由于 Nginx 的重定向机制导致的。
Nginx 允许为一个 URL 配置多个重定向域名(通过配置文件中的 server_name),而 $_SERVER['SERVER_NAME'] 默认会返回 server_name 列表中的第一个值。如果该值是重定向域名而非目标域名,就会导致匹配错误。
解决办法:调整 Nginx 配置文件中 server_name 的值顺序,将目标域名置于首位,重定向域名移至其后。
下面以 宝塔 +Nginx 为例: