.htaccess 如何在htaccess中允许/. well-known/security.txt

vu8f3i0k  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(114)

我只想将此文件列入**.well-known**目录白名单。
我的htaccess文件

Options -Indexes
RewriteEngine on
RewriteCond %{REQUEST_URI} !^public 
RewriteRule ^(.*)$ public/$1 [L]

<IfModule mod_rewrite.c>
  RewriteCond %{SCRIPT_FILENAME} -d [OR]
  RewriteCond %{SCRIPT_FILENAME} -f
  RewriteRule "(^|/)\." - [F]
</IfModule>

我的尝试
第一次
结论!我只想将security.txt文件列入白名单,该文件仅位于**.well-known**目录中

pprl5pva

pprl5pva1#

RewriteCond %{REQUEST_URI} !^public 
RewriteRule ^(.*)$ public/$1 [L]

由于REQUEST_URI服务器变量始终以斜杠开头,因此表达式!^public始终成功,因此此 condition 是错误得.
(From我假设您在/public子目录中必须有另一个.htaccess文件,否则您将得到一个重写循环。)
一旦你意识到这一点,然后你可以修改规则的方式,你已经尝试过。例如:

RewriteCond %{REQUEST_URI} !^/(public|\.well-known/security\.txt$)
RewriteRule ^(.*)$ public/$1 [L]

但是,您的其他规则会封锁所有以点开头的实体档案/目录要求,因此该要求仍会被封锁(以403 Forbidden)。此规则也不适用于其他要求(它必须在重新写入/public子目录 * 之前 *)。

您最好在文件开头将例外作为单独的规则。例如,尝试以下操作:

Options -Indexes

RewriteEngine on

# Prevent further processing for special files
RewriteRule ^\.well-known/security\.txt$ - [L]

# Block access to all dot-files
RewriteCond %{SCRIPT_FILENAME} -d [OR]
RewriteCond %{SCRIPT_FILENAME} -f
RewriteRule (^|/)\. - [F]

# Rewrite request to "/public" subdirectory
RewriteCond %{REQUEST_URI} !^/public
RewriteRule (.*) public/$1 [L]

该规则上的<IfModule> Package 器是多余的。

相关问题