.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 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]
Pruebe esta regla antes que sus otras reglas:
RewriteRule ^(admin|user)($|/) - [L]
Esto finalizará el proceso de reescritura.
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.
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]
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.
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 .