标头重定向会在不同的浏览器中产生不同的行为

Che*_*eng 2 php

目前,我有一个可通过以下域访问的脚本

http://me.domain.com/path/index.php
Run Code Online (Sandbox Code Playgroud)

如果满足某些条件,我将通过使用重定向回到自身

header('Location: index.php');
Run Code Online (Sandbox Code Playgroud)

重定向后,大多数主流浏览器最终会以

http://me.domain.com/path/index.php
Run Code Online (Sandbox Code Playgroud)

仍然.但是,对于某些第三方供应商的浏览器(用于SIM卡模拟目的),它们最终会在(注意丢失的路径)

http://me.domain.com/index.php
Run Code Online (Sandbox Code Playgroud)

我想知道,这是因为第三方供应商没有正确实现他们的浏览器?或者,在处理重定向时,不同的浏览器可以产生不同的行为吗?

我意识到如果我使用以下代码,

// $_SERVER['PHP_SELF'] is /path/index.php
header('Location: '.$_SERVER['PHP_SELF']);
Run Code Online (Sandbox Code Playgroud)

它适用于所有浏览器,不会丢失路径.

小智 6

手册说:

大多数现代客户端接受相对URI作为»Location:的参数,但是一些较旧的客户端需要绝对URI,包括方案,主机名和绝对路径.你通常可以使用$ _SERVER ['HTTP_HOST'],$ _SERVER ['PHP_SELF']和dirname()自己创建一个相对的URI:

总之,总是使用完整的URI来涵盖所有情况