2011-09-07 42 views
8

estado buscando durante 2 días y no puedo encontrar la solución correcta debido a mi falta de comprensión de mod_rewrite y las limitaciones de tiempo en este proyecto, por lo que espero que alguien pueda ayudar..htaccess en subdirectorio 'anulando' padre htaccess

El objetivo

Para volver a escribir todas las solicitudes al index.php raíz si el cliente no tiene la cookie correcta. Si el cliente tiene la cookie correcta, permite que naveguen como lo deseen.

El problema

El .htaccess en mi subdirectorio se tiene preferencia por encima de mi .htaccess de la raíz, así como las solicitudes www.mydomain.com/subdir/index.php ar no siendo redirigido.

Mi .htaccess de la raíz

Options FollowSymLinks 
RewriteEngine On 
RewriteBase/
RewriteCond %{HTTP_COOKIE} !^.*pass.*$ 
RewriteCond %{REQUEST_URI} !^/index.php$ 
RewriteRule ^(.*)$ http://www.mydomain.com/index.php?url=$0 [NC] 

Mi subdirectorio .htaccess

RewriteEngine On 
RewriteBase/
RewriteCond $1 !\.(gif|jpe?g|png)$ [NC] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php?/$1 [L] 

Otros detalles

Lo ideal sería que estoy tratando de crear un área protegida por contraseña, por lo todas las solicitudes se enrutan a index.php donde se puede ingresar una contraseña y cuando se verifica se crea una cookie, lo que permite la exploración gratuita de los contenidos y subdirectorios. Entonces, si hay una mejor manera de lograr esto, por favor hágamelo saber, y no me he ido para .htpasswd ya que necesito inicio de sesión personalizado, error y páginas de presentación.

Además, el subdirectorio .htaccess es un controlador de URL ExpressionEngine.

Gracias.

+0

Independientemente de cómo solucionar este problema, la comprobación de la presencia de una cookie no es bueno seguridad. Es trivial fingir uno, y como no está validando los datos en la cookie, simplemente verificando su presencia), su sistema de "seguridad" es trivial para eludir. –

+0

@Abe solo una sugerencia, pero ¿ha pensado en implementar la autenticación HTTP, si solo desea permitir el acceso a los directores: http://uk.php.net/manual/en/features.http-auth.php –

Respuesta

18

Para permitir la ejecución de las reglas de reescritura desde el padre .htaccess (htaccess desde la carpeta principal), debe permitirlo explícitamente (Apache tratará las reglas de reescritura en el .htaccess actual como el único que se debe ejecutar, siempre que la URL reescrita permanece en la misma subcarpeta).

Es necesario añadir esta línea a su .htaccess en subcarpeta: manual de

RewriteOptions inherit 

Apache: http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriteoptions