[Php] ¿Cómo puedo obtener la URL completa de la página actual en un servidor Windows / IIS?


Answers

$pageURL = (@$_SERVER["HTTPS"] == "on") ? "https://" : "http://";
if ($_SERVER["SERVER_PORT"] != "80")
{
    $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
} 
else 
{
    $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
}
return $pageURL;
Question

WordPress una instalación de WordPress a una nueva carpeta en un servidor de Windows / IIS . Estoy configurando 301 redirecciones en PHP, pero parece que no funciona. Mis URLs de publicación tienen el siguiente formato:

http:://www.example.com/OLD_FOLDER/index.php/post-title/

No puedo entender cómo agarrar el /post-title/ parte de la URL.

$_SERVER["REQUEST_URI"] , que todos parecen recomendar, devuelve una cadena vacía. $_SERVER["PHP_SELF"] acaba de devolver index.php . ¿Por qué es esto y cómo puedo solucionarlo?




REQUEST_URI está configurado por Apache, por lo que no lo obtendrá con IIS. Intenta hacer var_dump o print_r en $ _SERVER y ver qué valores existen allí que puedes usar.




En mi servidor apache, esto me da la URL completa en el formato exacto que está buscando:

$_SERVER["SCRIPT_URI"]



Añadir:

function my_url(){
    $url = (!empty($_SERVER['HTTPS'])) ?
               "https://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'] :
               "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
    echo $url;
}

Entonces simplemente llame a la función my_url .




$_SERVER['REQUEST_URI'] no funciona en IIS, pero encontré esto: which sounds prometedor.




Use la siguiente línea en la parte superior de la página PHP donde está usando $_SERVER['REQUEST_URI'] . Esto resolverá tu problema.

$_SERVER['REQUEST_URI'] = $_SERVER['PHP_SELF'] . '?' . $_SERVER['argv'][0];



¿Todos olvidaron http_build_url ?

http_build_url($_SERVER['REQUEST_URI']);

Cuando no se pasan parámetros a http_build_url , asumirá automáticamente la URL actual. También esperaría que se incluyera REQUEST_URI , aunque parece ser necesario para incluir los parámetros GET.

El ejemplo anterior devolverá la URL completa.