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

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

Directorios para excluir: “admin” y “usuario”.

Por lo tanto, las solicitudes http: http://www.domain.com/admin/ no se deben pasar 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] 

Pruebe esta regla antes que sus otras reglas:

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

Esto terminará el proceso de reescritura.

Lo que también podría hacer es colocar un archivo .htaccess que contenga

 RewriteEngine Off 

En las carpetas que desea excluir de la reescritura (por las reglas en un archivo .htaccess que está más arriba en el árbol). Simple pero efectivo

agregue una condición para buscar 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] 
 RewriteEngine On RewriteRule ^(wordpress)($|/) - [L] 

Usamos la siguiente regla mod_rewrite:

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

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

Si desea eliminar un directorio 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 a /index.php excluyendo solicitudes para / foo / .

Para excluir todos los directorios existentes, deberá usar la siguiente condición arriba 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 direcciones ) a /index.php .