2011-09-07 84 views
8

一直在寻找2天,并不能完全得到正确的解决方案,由于我对这个项目,所以希望有人能帮助缺乏的mod_rewrite和时间限制的理解。的.htaccess中的子目录“覆盖”父htaccess的

目的

要改写到根index.php的所有请求,如果客户端没有正确的cookie。 如果客户端有正确的cookie,可以让他们按照自己的意愿进行浏览。

问题

在我的子目录中的htaccess正在precendence在我的根htaccess的,所以请求,如www.mydomain.com/subdir/index.php arn't被重定向。

我的根的.htaccess

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

我子目录的htaccess

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

理想我想创建一个密码保护区域,所以其他信息所有的请求都被路由到index.php在哪里可以输入密码,并在验证后创建cookie,允许自由浏览内容和子目录。所以如果有更好的方法来完成这个,那么请让我知道,而且我没有去.htpasswd,因为我需要自定义登录,错误和启动页面。

此外,子目录的.htaccess是ExpressionEngine URL处理程序。

谢谢。

+0

不管你如何解决这个问题,检查一个cookie的存在不是很好安全。伪造一个是微不足道的,因为你没有验证cookie中的数据,只是检查它的存在),所以你的“安全”系统是微不足道的。 –

+0

@Abe只是一个建议,但你有没有想过实现HTTP认证,如果你唯一的希望允许访问directorys:http://uk.php.net/manual/en/features.http-auth.php –

回答

18

要允许从父.htaccess(父文件夹中的htaccess)执行重写规则,您需要明确地允许它(Apache会将当前.htaccess中的重写规则视为唯一需要执行的规则,只要重写的URL保持在同一个子文件夹中)。

您需要将此行添加到您的.htaccess中的子文件夹:

RewriteOptions inherit 

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