子目录“覆盖”父htaccess中的.htaccess - php

由于我缺乏对mod_rewrite的理解以及该项目的时间限制,因此已经搜索了2天,却无法获得正确的解决方案,希望有人能提供帮助。

目的

如果客户端没有正确的cookie,将所有请求重写到根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]

我的子目录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处理程序。

谢谢。

参考方案

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

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

RewriteOptions inherit

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

.htaccess RewriteCond,其中URI不包含域 - php

我已经在Google和StackOverflow上四处寻找有关此问题的答案,但是我对.htaccess不太了解这一事实并不能帮助我确定适合我的情况的正确答案,所以我在这里问。我的情况是,我有几个站点使用与服务器上的根目录相同的物理目录。一切正常,但我想确保每个站点都无法从浏览器访问彼此的图像等,除非它们位于正确的域中。目前,我有一个像这样的文件结构:/res…

当使用.htaccess RewriteRule时,似乎POST值丢失。 GET值确定。怎么修? - php

几天前,我有一个关于从地址栏中删除index.php的问题,因此页面地址看起来更短更好。此问题的最短解决方案是(RewriteRule ^index.php / [L,R=301] in the .htaccess file)。而且有效!由于我将该字符串放入.htaccess中,因此某些页面被重定向到主页。我花了很多时间去猜测,为什么。据我了解,答案是:对于…

如何隐藏实际的下载文件夹位置 - php

我想隐藏下载文件夹的位置,以便用户下载文件时看不到该位置。我认为可以使用.htaccess文件完成此操作,但是我该怎么做?另外,如何用PHP完成呢? 参考方案 这是我在PHP中执行的操作:<?php $fakeFileName= "fakeFileName.zip"; $realFileName = "realFileNa…

PHP-将日期插入日期时间字段 - php

我已在数据库中使用datetime字段存储日期,使用PHP将“今天的日期”插入该字段的正确方法是什么?干杯, 参考方案 我认为您可以使用php date()函数

PHP getallheaders替代 - php

我正在尝试从服务器上的apache切换到nginx。唯一的问题是我在PHP脚本中使用的getallheaders()函数,该函数不适用于Nginx。我已经尝试过用户在getallheaders函数上的php站点上提供的注释,但这并不返回所有请求标头。请告诉我如何解决这个问题。我真的想切换到Nginx。 参考方案 您仍然可以使用它,但是您必须像这里一样重新定义…