Php .htaccess在子目录'中;覆盖';父htaccess

Php .htaccess在子目录'中;覆盖';父htaccess,php,.htaccess,mod-rewrite,rewrite,password-protection,Php,.htaccess,Mod Rewrite,Rewrite,Password Protection,我已经搜索了2天,但由于我对mod_重写的理解不足以及这个项目的时间限制,所以无法找到正确的解决方案,所以希望有人能帮助我 目标 如果客户端没有正确的cookie,则重写对root index.php的所有请求。 如果客户机具有正确的cookie,则允许他们按照自己的意愿进行浏览 问题 我的子目录中的htaccess优先于我的根htaccess,因此像www.mydomain.com/subdir/index.php这样的请求不会被重定向 我的根目录.htaccess Options Follo

我已经搜索了2天,但由于我对mod_重写的理解不足以及这个项目的时间限制,所以无法找到正确的解决方案,所以希望有人能帮助我

目标

如果客户端没有正确的cookie,则重写对root index.php的所有请求。 如果客户机具有正确的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]
RewriteEngine On
RewriteBase /
RewriteCond $1 !\.(gif|jpe?g|png)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]
My subdir 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]
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处理程序


谢谢

要允许从parent.htaccess(从parent文件夹中的htaccess)执行重写规则,您需要显式地允许它(Apache将把当前.htaccess中的重写规则视为唯一需要执行的规则,只要重写的URL仍在同一子文件夹中)

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

RewriteOptions inherit

Apache手册:

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

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

RewriteOptions inherit

Apache手册:

无论您如何解决此问题,检查cookie的存在都不是好的安全性。伪造一个并不重要,因为你不是在验证cookie中的数据,只是检查它的存在),你的“安全”系统是很容易绕过的。@Abe只是一个建议,但是如果你只想允许访问目录,你是否考虑过实现HTTP身份验证:不管你如何解决这个问题,检查cookie的存在不是很好的安全性。伪造一个是很简单的,因为你不是在验证cookie中的数据,只是检查它的存在),你的“安全”系统是很容易绕过的。@Abe只是一个建议,但是你有没有想过实现HTTP身份验证,如果您只希望允许访问目录:如果希望所有子htaccess继承目录,您还可以将
RewriteOptions InheritDown
放在父htaccess中。如果希望所有子htaccess继承目录,您还可以将
RewriteOptions InheritDown
放在父htaccess中。