子目录中的 .htaccesss “overovering” parent htaccess

一直在寻找2天,由于我对这个项目的mod_rewrite和时间限制缺乏了解,所以无法完全得到正确的解决方案,所以希望有人可以提供帮助。

目标

若要重写对根索引的所有请求.php客户端没有正确的 Cookie。如果客户端具有正确的cookie,则允许他们根据需要浏览。

问题

我的子目录中的 htaccess 优先于我的根 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]

My subdir htaccess

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

附加信息

理想情况下,我正在尝试创建一个密码保护区域,以便所有请求都路由到索引.php在那里可以输入密码,并在验证时创建cookie,允许自由浏览内容和子目录。因此,如果有更好的方法来实现这一点,那么请让我知道,我没有去.htpasswd,因为我需要自定义登录,错误和启动页面。

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

谢谢。


答案 1

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

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

RewriteOptions inherit

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


答案 2

推荐