1

我的文件夹结构看起来像这样。

-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]

不知何故,上述方法在一个系统中有效,但在其他系统中无效。你能指出我在这里做错了什么吗?

谢谢,

萨哈

4

2 回答 2

4

尝试更改您的规则,以便让 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-base 为/beta/. 因此,所有不以 a 开头的文件/路径名都/将自动具有该基础。

接下来的两条规则只是简单地与 URI 匹配,并使用字符“通过” -,这意味着“不做任何事情”。因此,当您请求/folder2or时/file2.php,重写引擎什么也不做,并让请求通过,就好像什么都没发生一样。但是,如果请求是其他任何内容,则前两条规则将不匹配,最后一条规则将匹配,因为正则表达式是^,它匹配所有内容。该规则的目标将所有内容重定向到/beta/file2.php(因为基础)。

方括号中带有标志的禁止规则F是一样的,如果请求不是针对文件夹 2 或文件 2.php,则该规则将匹配它 ( ^) 并通过 ( -) 但F标志使其返回一个“403 Forbidden”,而不是服务于请求的任何内容。

于 2012-08-31T07:53:46.797 回答
0

使用REQUEST_FILENAMEinstedREQUEST_URI我希望这会有所帮助

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !/folder2
RewriteCond %{REQUEST_FILENAME} !/file2.php
RewriteRule $ /file2.php [R=302,L]
于 2012-08-31T07:52:33.210 回答