我的文件夹结构看起来像这样。
-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]
不知何故,上述方法在一个系统中有效,但在其他系统中无效。你能指出我在这里做错了吗?
谢谢,
萨哈
答案 0 :(得分:3)
尝试更改规则,以便让2个文件夹通过,然后将所有内容重定向到file2:
Options +FollowSymlinks
RewriteEngine on
RewriteBase /beta/
RewriteRule ^file2\.php - [L]
RewriteRule ^folder2 - [L]
RewriteRule ^ file2.php [L,R=302]
您获得的错误可能来自您所处的%
。
如果您想彻底禁止访问其他任何内容,可以将最后一条规则更改为:
RewriteRule ^ - [L,F]
如果您不介意,请解释每一行吗?
RewriteBase
指令允许重写引擎知道相对路径的URI基础为/beta/
。因此,所有不以/
开头的文件/路径名都会自动拥有该基础。
接下来的两个规则只是匹配URI并使用-
字符进行“传递”,这意味着“不做任何事”。因此,当您请求/folder2
或/file2.php
时,重写引擎不执行任何操作,并让请求通过,就好像什么都没发生一样。但是如果请求是其他任何内容,前两个规则将不匹配,最后一个规则将匹配,因为正则表达式是^
,它匹配所有内容。该规则的目标将所有内容重定向到/beta/file2.php
(因为基础)。
方括号中带有F
标志的禁止规则是相同的,如果请求不是针对folder2或file2.php,那么该规则将匹配它(^
)并且它通过它传递(-
),但是F
标志使它返回“403 Forbidden”而不是满足请求的任何目的。
答案 1 :(得分:0)
使用REQUEST_FILENAME
代替REQUEST_URI
我希望这会有所帮助
Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !/folder2
RewriteCond %{REQUEST_FILENAME} !/file2.php
RewriteRule $ /file2.php [R=302,L]