URLs insensibles a las mayúsculas y minúsculas con mod_rewrite

Me gustaría que cualquier URL que no llegue a un archivo existente, haga una búsqueda en los otros casos posibles y vea si esos archivos existen, y si es así, 302 para ellos.

Si eso no es posible, estoy de acuerdo con estos compromisos:

  • Solo revisa la versión en minúsculas
  • Solo verifique la primera porción del camino

Por ejemplo, http://example.com/CoOl/PaTH/CaMELcaSE debe redireccionar a http://example.com/cool/path/camelCase (suponiendo que exista).

pero, por supuesto, una solución completa es mucho más útil para mí y para otros

CheckSpelling on 

Coincide con archivos y directorios. Ver la documentación para más detalles.

No tengo a mano el Apache para probar, pero alguna combinación de estas reglas debe hacer lo que quiera:

 RewriteEngine en
 RewriteMap lower int: tolower
 RewriteCond $ {lower:% {REQUEST_URI}} -U
 RewriteRule [AZ] $ {lower:% {REQUEST_URI}} [R = 302, L]
  • Un mapa en minúsculas para convertir / SoMeThinG en / algo
  • Una condición para ver si existe la minúscula de REQUEST_URI (-U es una consulta interna de Apache)
  • La regla para hacer la reescritura

No sé si RewriteMap se puede aplicar en una condición o si solo se aplica a una regla. Estos se basan en expertos intercambian respuestas aceptadas y una pequeña discusión naranja en el foro .

Su solución “ideal” probablemente no sea posible a menos que pueda enumerar todas las páginas válidas en su sitio. Si solo tiene unas pocas páginas válidas, una combinación de RewriteMap y un mapa de texto hará exactamente lo que necesita. Si hay cientos / miles de páginas, puede necesitar escribir un script y usar la directiva prg .

Si no puede identificar todas las páginas válidas, deberá probar todas las variantes por si acaso. Considere su URL como una cadena binaria, con 0 para minúsculas y 1 para mayúsculas. Solo con tu simple ejemplo, deberías probar 2 ^ 17 variaciones, 128k páginas.

Busque el módulo Apache mod_negociación. Hace exactamente lo que desea: http://httpd.apache.org/docs/2.0/mod/mod_negotiation.html#multiviews

También puede canalizar todas las solicitudes a un solo archivo PHP y dejar que el archivo PHP haga la verificación por usted.