Moví una instalación de WordPress a una nueva carpeta en un servidor Windows / IIS . Estoy configurando redireccionamientos 301 en PHP, pero no parece estar funcionando. Las URL de mis publicaciones tienen el siguiente formato:
http:://www.example.com/OLD_FOLDER/index.php/post-title/
No puedo entender cómo tomar la /post-title/
parte de la URL.
$_SERVER["REQUEST_URI"]
- que todos parecen recomendar - está devolviendo una cadena vacía. $_SERVER["PHP_SELF"]
Solo está volviendo index.php
. ¿Por qué es esto y cómo puedo solucionarlo?
Respuestas:
Tal vez, porque estás bajo IIS,
es lo que desea, en función de las URL que solía explicar.
Para Apache, lo usarías
$_SERVER['REQUEST_URI']
.fuente
Notice: Undefined index: PATH_INFO in /home/tdpk/public_html/system/config.php on line 14
fuente
Para Apache:
También puede usar en
HTTP_HOST
lugar deSERVER_NAME
como lo comentó Herman. Vea esta pregunta relacionada para una discusión completa. En resumen, probablemente esté de acuerdo con el uso de cualquiera. Aquí está la versión 'host':Para los paranoicos / Por qué importa
Por lo general, configuro
ServerName
elVirtualHost
porque quiero que esa sea la forma canónica del sitio web. El$_SERVER['HTTP_HOST']
se establece en función de los encabezados de solicitud. Si el servidor responde a alguno / todos los nombres de dominio en esa dirección IP, un usuario podría suplantar el encabezado, o peor, alguien podría apuntar un registro DNS a su dirección IP, y luego su servidor / sitio web estaría sirviendo un sitio web dinámico enlaces creados en una URL incorrecta. Si usa el último método, también debe configurar suvhost
o configurar una.htaccess
regla para hacer cumplir el dominio que desea servir, algo como:Espero que ayude. El punto real de esta respuesta fue simplemente proporcionar la primera línea de código para aquellas personas que terminaron aquí cuando buscaban una forma de obtener la URL completa con apache :)
fuente
$_SERVER['HTTP_HOST']
lugar de$_SERVER['SERVER_NAME']
. Si hay una configuración de host virtual, SERVER_NAME mostrará ese nombre. Puede ser algo como lo*.example.com
que no es válido.$_SERVER['REQUEST_URI']
no funciona en IIS, pero encontré esto: http://neosmart.net/blog/2006/100-apache-compliant-request_uri-for-iis-and-windows/ que suena prometedor.fuente
Use esta clase para que la URL funcione.
fuente
Añadir:
Entonces solo llame a la
my_url
función.fuente
Utilizo la siguiente función para obtener la URL actual y completa. Esto debería funcionar en IIS y Apache.
fuente
$query = isset($_SERVER['argv']) ? substr($_SERVER['argv'][0], strpos($_SERVER['argv'][0], ';') + 1) : '';
. He actualizado tu respuesta para incluir esto.REQUEST_URI está configurado por Apache, por lo que no lo obtendrá con IIS. Intente hacer un var_dump o print_r en $ _SERVER y vea qué valores existen allí que pueda usar.
fuente
La parte del posttítulo de la URL está detrás de su
index.php
archivo, que es una forma común de proporcionar URL amigables sin usar mod_rewrite. Por lo tanto, el posttítulo es en realidad parte de la cadena de consulta, por lo que debería poder obtenerlo usando $ _SERVER ['QUERY_STRING']fuente
Use la siguiente línea en la parte superior de la página PHP donde está usando
$_SERVER['REQUEST_URI']
. Esto resolverá tu problema.fuente
¡Oh, la diversión de un fragmento!
Tiene hermosos retornos como:
fuente
¿Todos olvidaron http_build_url ?
Cuando no se pasan parámetros
http_build_url
, asumirá automáticamente la URL actual. Yo esperaríaREQUEST_URI
que me incluyeran también, aunque parece ser necesario para incluir los parámetros GET.El ejemplo anterior devolverá la URL completa.
fuente
He usado el siguiente código y obtengo el resultado correcto ...
fuente
En mi servidor apache, esto me da la URL completa en el formato exacto que está buscando:
fuente
¡Soporte de proxy inverso!
Algo un poco más robusto. Nota Solo funcionará en
5.3
o más.fuente