redireccionar htaccess con cambiar automaticamente apache mod-rewrite

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.