apache - htaccess - regla mod_rewrite para redirigir todas las solicitudes a excepción de una ruta específica
redireccionar php (1)
HTTP_HOST solo contiene el nombre de host, no la ruta de la URL solicitada.
RewriteCond %{REQUEST_URI} !^/audio
Debería ser todo lo que necesitas
Además, puede obtener información de depuración del motor de reescritura con lo siguiente, que es realmente útil para ver cómo se combinan sus condiciones y reglas:
RewriteLog /path/to/log/file
RewriteLogLevel 3
Estoy tratando de redirigir todas las solicitudes a mi dominio a otro dominio usando mod_rewrite en una declaración Apache 2.2 VirtualHost. Hay una excepción a esto: me gustaría que no se redireccionen todas las solicitudes a la ruta /audio
.
He escrito RewriteCond y RewriteRule para hacer esto, pero no está del todo bien y no puedo entender por qué. La expresión regular contiene un lookahead negativo para la cadena "/ audio", pero por alguna razón esto no coincide. Aquí está la definición:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*/.)?mydomain/.net(?!/audio) [NC]
RewriteRule ^(.*)$ http://www.newdomain.net [L,R=301]
Si cambio el RewriteCond a:
RewriteCond %{HTTP_HOST} ^(.*/.)?mydomain/.net/(?!audio) [NC]
(es decir, coloca la barra diagonal externa fuera de la parte negativa de búsqueda anticipada), luego funciona, pero la desventaja de esto es que las solicitudes a mydomain.net sin una barra diagonal posterior no se redirigirán.
¿Alguien puede señalar lo que estoy haciendo mal?
(Nota: StackOverflow.com está agregando los corchetes angulares alrededor del dominio en el bit RewriteRule - ¡no están allí en el código real!)
Estas son las reglas:
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot "/var/www/mydomain.net/htdocs"
ServerName www.mydomain.net
ServerAlias mydomain.net
RewriteEngine on
RewriteCond {REQUEST_URI} !^/audio
RewriteRule ^(.*)$ http://www.newdomain.net [L,R=301]
RewriteLog logs/mod_rewrite_log
RewriteLogLevel 3
ErrorLog logs/error_log
CustomLog logs/access_log common
</VirtualHost>
Gracias @mercutio: tiene mucho sentido, pero parece que todavía no funciona.
Esto es lo que dice el registro de mod_rewrite cuando hago una solicitud a http://mydomain.net/audio/something.mp3 :
(2) init rewrite engine with requested uri /audio/something.mp3
(3) applying pattern ''^(.*)$'' to uri ''/audio''
(2) rewrite ''/audio'' -> ''http://www.newdomain.net/''
(2) explicitly forcing redirect with http://www.newdomain.net
(1) escaping http://www.newdomain.net for redirect
(1) redirect to http://www.newdomain.net [REDIRECT/301]
Como el REQUEST_URI comienza con /audio
, esperaría que se ignore RewriteRule.