.htaccess文件内容,仅允许访问一个文件和一个文件夹

nx7onnlm  于 2023-08-06  发布在  其他
关注(0)|答案(2)|浏览(136)

以下文件和文件夹结构

beta
   folder1
   folder2
   folder3
   file1.php
   file2.php

字符串
我需要限制对所有文件和文件夹的访问**,folder2file2.php 除外。只有**。
我的 .htaccess 文件目前看起来像这样:

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_URI} !/folder2%$
RewriteCond %{REQUEST_URI} !/file2.php
RewriteRule $ /beta/file2.php [R=302,L]


以上在一个系统中工作,但在另一个系统中不工作。
你能指出我这里做错了什么吗?

zf2sa74q

zf2sa74q1#

尝试更改规则,让2个文件夹通过,然后将所有内容重定向到file 2:

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标志的禁止规则是一样的,如果请求不是针对folder 2或file2.php的,那么该规则将匹配它(^)并通过(-),但F标志使其返回“403 Forbidden”而不是服务于请求的任何内容。

xyhw6mcr

xyhw6mcr2#

使用REQUEST_FILENAME代替REQUEST_URI,希望这会有所帮助

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !/folder2
RewriteCond %{REQUEST_FILENAME} !/file2.php
RewriteRule $ /file2.php [R=302,L]

字符串

相关问题