.htaccess mod_rewrite: cómo excluir el directorio de la regla de reescritura

Resuelto Kelvin asked hace 14 años • 6 respuestas

Tengo 8 líneas de reglas de reescritura en mi archivo .htaccess. Necesito excluir dos directorios físicos de mi servidor de estas reglas para que puedan ser accesibles. Por ahora, todas las solicitudes se envían al archivo index.php.

Directorios a excluir: "admin" y "usuario".

Entonces las solicitudes http: http://www.domain.com/admin/ no deben pasarse al archivo index.php.

ErrorDocument 404 /index.php?mod=error404

Options  FollowSymLinks
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]

RewriteRule ^([^/] )/([^/] )\.html$ index.php?lang=$1&mod=$2 [L]
RewriteRule ^([^/] )/$ index.php?lang=$1&mod=home [L]
Kelvin avatar Dec 05 '09 00:12 Kelvin
Aceptado

Pruebe esta regla antes que sus otras reglas:

RewriteRule ^(admin|user)($|/) - [L]

Esto finalizará el proceso de reescritura.

Gumbo avatar Dec 04 '2009 17:12 Gumbo

Lo que también podrías hacer es poner un archivo .htaccess que contenga

RewriteEngine Off

En las carpetas que desea excluir de la reescritura (según las reglas de un archivo .htaccess que se encuentra más arriba en el árbol). Sencillo pero eficaz.

 avatar Jul 12 '2013 11:07

agregue una condición para verificar el directorio de administración, algo como:

RewriteCond %{REQUEST_URI} !^/?(admin|user)/
RewriteRule ^([^/] )/([^/] )\.html$ index.php?lang=$1&mod=$2 [L]

RewriteCond %{REQUEST_URI} !^/?(admin|user)/
RewriteRule ^([^/] )/$ index.php?lang=$1&mod=home [L]
Rob avatar Dec 04 '2009 17:12 Rob

Usamos la siguiente regla mod_rewrite:

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/test/
RewriteCond %{REQUEST_URI} !^/my-folder/
RewriteRule (.*) http://www.newdomain.com/$1 [R=301,L]

Esto redirige (permanentemente con una redirección 301) todo el tráfico del sitio a http://www.newdomain.com , excepto las solicitudes a recursos en los directorios /test y /my-folder. Transferimos al usuario al recurso exacto que solicitó utilizando el grupo de captura (.*) y luego incluyendo $1 en la nueva URL. Cuidado con los espacios.

Camilo Tilaguy avatar Sep 20 '2014 01:09 Camilo Tilaguy

Si desea eliminar un directorio en particular de la regla (es decir, desea eliminar el directorio foo ), puede usar:

RewriteEngine on

RewriteCond %{REQUEST_URI} !^/foo/$
RewriteRule !index\.php$ /index.php [L]

La rewriteRule anterior reescribirá todas las solicitudes en /index.php excluyendo las solicitudes de /foo/ .

Para excluir todos los directorios existentes, deberá utilizar la siguiente condición encima de su regla:

RewriteCond %{REQUEST_FILENAME} !-d

la siguiente regla

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !index\.php$ /index.php [L]

reescribe todo (excepto los directorios) en /index.php .

Amit Verma avatar Nov 05 '2016 17:11 Amit Verma