Tengo una regla de reescritura que incluye el URI de una página:
(<page-uri>)/someaction/(\d+)
Si el URI de la página incluye caracteres cirílicos, como доска-объявлений
, la regla se almacena como:
(%d0%b4%d0%be%d1%81%d0%ba%d0%b0-%d0%be%d0%b1%d1%8a%d1%8f%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b9)/someaction/(\d+)
Si va a una página que incluye un enlace a una URL que coincide con la regla y hace clic en el enlace, el navegador cargará la página de destino sin problemas y WordPress puede hacer coincidir la regla con la URL solicitada.
En Safari (Mac), sin embargo, si copia la URL con un clic derecho > Copie el enlace y luego intente cargar la página de destino pegando la URL copiada en una nueva pestaña, obtendrá un error 404 No encontrado.
Cuando copia la URL en Safari, la URL se almacena con una codificación porcentual con los caracteres utilizados para representar los octetos de los caracteres cirílicos, todo en mayúsculas:
%D0%B4%D0%BE%D1%81%D0%BA%D0%B0-%D0%BE%D0%B1%D1%8A%D1%8F%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9/someaction/1
No he podido reproducir el problema en Chrome o Firefox (ambos Mac) porque ambos almacenan la URL usando caracteres en minúscula para representar los octetos.
Esa URL con porcentaje de codificación es lo que recibe WordPress a través de la variable $_SERVER['REQUEST_URI']
. El problema es que el código responsable de hacer coincidir el URI solicitado con las reglas de reescritura hace una comparación que distingue entre mayúsculas y minúsculas (consulte el método parse_request
en /wp-includes/class-wp.php
), lo que hace imposible que WordPress retire mi regla, aunque
%D0%B4%D0%BE%D1%81%D0%BA%D0%B0-%D0%BE%D0%B1%D1%8A%D1%8F%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9
y
%d0%b4%d0%be%d1%81%d0%ba%d0%b0-%d0%be%d0%b1%d1%8a%d1%8f%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b9
representa la misma secuencia de caracteres.
- ¿Alguien sabe cómo evitar errores 404 No encontrados cuando los navegadores enviaron la solicitud usando octetos con un caso diferente?
- ¿Es esto algo que WordPress debería soportar? ¿o debería intentar eliminar los URI de la página de mis reglas de reescritura para evitar el problema?