/ / Htaccess regex: excluir REQUEST_URI - regex, apache, .htaccess, mod-rewrite, redirect

Expresión regular de Htaccess: excluir REQUEST_URI - expresión regular, apache, .htaccess, reescritura de mods, redirección

Realmente intenté todo, la herramienta probador htaccess dice que está bien, pero en realidad no funciona.

Quiero redirigir un subdominio al dominio principal solo si REQUEST_URI no comienza con 3 cadenas específicas.

Lo intenté sin éxito con:

RewriteCond %{HTTP_HOST} ^sub.example.com$ [NC]
RewriteCond %{REQUEST_URI} !(aaa|bbb|ccc)
RewriteCond %{REQUEST_URI} !^/?$
RewriteRule ^(.*)$ http://www.example.com%{REQUEST_URI} [R=301,NC,L,QSA]

Quiero eso:

  • http://sub.example.com (no debe "redirigir) -> http://sub.example.com El | Okay
  • http://sub.example.com/aaa/sss (no debe "redirigir) -> http://sub.example.com/aaa/sss El | KO (redirigir a http: // www ...)
  • http://sub.example.com/zzz/xxx (debe redirigir) -> http://www.example.com/zzz/xxx El | Okay

Gracias

Respuestas

2 para la respuesta № 1

Prueba esta regla en su lugar:

RewriteCond %{HTTP_HOST} ^sub.example.com$ [NC]
RewriteCond %{THE_REQUEST} !s/+(aaa|bbb|ccc)/ [NC]
RewriteRule . http://www.example.com%{REQUEST_URI} [R=301,L,NE]

Pruébalo después de borrar la caché de tu navegador.

Utilizando THE_REQUEST en lugar de REQUEST_URI para asegurarnos de que usamos valores de URI sin cambios tal como los recibió Apache.