¿Es seguro usar $_SERVER['REQUEST_URI'] en WordPress?
He revisado otras respuestas y veo que $_SERVER['REQUEST_URI']
suele recomendarse y es la respuesta aceptada para obtener la URI de la página actual junto con $_SERVER['HTTP_HOST']
.
Analicé el código fuente de WordPress y también se usa ampliamente allí.
Pero encontré cierta controversia sobre que no funciona en IIS. ¿Quizás solo era un problema en el pasado? Incluso intenté instalar IIS en mi PC para verificarlo, pero no puedo configurarlo y parece excesivo solo para confirmar esto.
Parece que es la única variable SERVER que incluye la información que necesito:
/slug-del-panel/nggallery/tags/colores-oscuros/
la parte resaltada del ejemplo es agregada por NextGEN Gallery 2 y solo es accesible a través de $_SERVER['REQUEST_URI']
, nada más. Anteriormente era accesible usando get_query_var, pero ya no.
Si $_SERVER['REQUEST_URI']
no está configurada, simularla configurándola manualmente y creándola en base a PHP_SELF
y QUERY_STRING
produce resultados no equivalentes.
Entonces, ¿es seguro confiar en que $_SERVER['REQUEST_URI']
siempre estará disponible para usar en instalaciones de WP? Supongo que sí, ya que el código central de WP lo usa, pero tenía que preguntar.
$_SERVER['REQUEST_URI']
no estará vacío en WordPress, porque se rellena en wp_fix_server_vars()
(archivo wp-includes/load.php
).
Esta función se llama en wp-settings.php
antes de que se cargue cualquier plugin. Por lo tanto, puedes usarlo.
Pero siempre escapa el valor. Es global y puede ser modificado por cualquier otro código, así que no puedes confiar en su valor.
Un caso diferente es acceder al valor mediante
filter_input(INPUT_SERVER, 'REQUEST_URI');
El acceso de escritura por parte de WordPress no afectará al valor, porque filter_input()
siempre toma el valor original. Así que, aunque este es el enfoque más moderno y limpio, podría fallar en algunas circunstancias. Consulta también este hilo en Stack Overflow.

Muchas gracias, excelente información. Ahora puedo desinstalar IIS y olvidarme de él :) Busqué masivamente en los archivos de WP $_SERVER['REQUEST_URI'] pero de alguna manera pasé por alto lo que has señalado. Por supuesto que lo voy a escapar, no confío en nada. Solo necesitaba saber si es utilizable. Gracias de nuevo.
