子目录中的.htaccess'覆盖'父htaccess

时间:2011-09-07 16:35:59

标签: php .htaccess mod-rewrite rewrite password-protection

由于我对mod_rewrite缺乏了解以及对此项目的时间限制,所以一直在寻找2天并且找不到合适的解决方案,所以希望有人可以提供帮助。

目标

如果客户端没有正确的cookie,则重写对root index.php的所有请求。 如果客户端具有正确的cookie,则允许他们按照自己的意愿进行浏览。

问题

我子目录中的htaccess优先于我的root htaccess,因此www.mydomain.com/subdir/index.php等请求不会被重定向。

我的根.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。

此外,subdir .htaccess是一个ExpressionEngine URL处理程序。

感谢。

1 个答案:

答案 0 :(得分:23)

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

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

RewriteOptions inherit

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