以下文件和文件夹结构
beta
folder1
folder2
folder3
file1.php
file2.php
字符串
我需要限制对所有文件和文件夹的访问**,folder2 和 file2.php 除外。只有**。
我的 .htaccess 文件目前看起来像这样:
Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_URI} !/folder2%$
RewriteCond %{REQUEST_URI} !/file2.php
RewriteRule $ /beta/file2.php [R=302,L]
型
以上在一个系统中工作,但在另一个系统中不工作。
你能指出我这里做错了什么吗?
2条答案
按热度按时间zf2sa74q1#
尝试更改规则,让2个文件夹通过,然后将所有内容重定向到file 2:
字符串
您得到的错误可能来自您的条件下的
%
。如果你想完全禁止访问任何其他内容,你可以将最后一条规则更改为:
型
如果你不介意的话,可以解释一下每一行吗?
RewriteBase
指令让重写引擎知道相对路径的URI基为/beta/
。因此,所有不以/
开头的文件/路径名将自动具有该基础。接下来的两个规则只是匹配URI,并使用
-
字符进行“传递”,这意味着“不做任何事情”。因此,当您请求/folder2
或/file2.php
时,重写引擎什么也不做,并让请求通过,就像什么都没有发生一样。但是如果请求是其他的,前两个规则将不匹配,最后一个规则将匹配,因为正则表达式是^
,它匹配所有内容。该规则的目标将所有内容重定向到/beta/file2.php
(因为基础)。方括号中带有
F
标志的禁止规则是一样的,如果请求不是针对folder 2或file2.php的,那么该规则将匹配它(^
)并通过(-
),但F
标志使其返回“403 Forbidden”而不是服务于请求的任何内容。xyhw6mcr2#
使用
REQUEST_FILENAME
代替REQUEST_URI
,希望这会有所帮助字符串