gpt4 book ai didi

Apache ,.htaccess : FilesMatch matches URIs or real file names?

转载 作者:可可西里 更新时间:2023-11-01 17:03:55 25 4
gpt4 key购买 nike

这是关于 Apache 的,特别是 .htaccess 指令。

假设 /index.htm 存在。

我想要一个允许访问的文件的白名单(仅.htm),所以我想出了这个:

Order deny,allow
Deny from all
<FilesMatch "\.htm$">
Allow from all
</FilesMatch>

我看到的是,当请求 www.domain.com/index.htm 时一切正常,但是当只请求 www.domain.com(空 URI)时我收到 403 响应(当然我应该得到默认的 index.htm)。

经过一些测试,我发现这是因为FilesMatch不允许使用空字符串,所以我想知道我是否理解得很好:[question #1a] Can I say that FilesMatch匹配 URI 而直接匹配真实文件名(文件系统中的文件名)?

在此之后,我尝试用以下方法重写空字符串:

RewriteEngine on
RewriteRule ^$ index.htm [L]

没有运气,所以[问题#1b]我可以说 FilesMatch 在任何重写之前拒绝访问还是我做错了什么?

最后,我想出的唯一可行的解​​决方案是在 FilesMatch 的正则表达式中包含空字符串:

<FilesMatch "(^|\.htm)$">

[问题 #2] 这真的是解决此问题的最佳方法,甚至是唯一方法吗?我在网上找不到我的解决方案,所以我担心我从一开始就做错了......

谢谢!

最佳答案

关于您的主要问题和问题 1a,FilesMatch 匹配文件路径,使用 LocationMatch 匹配 url。

此处记录:http://httpd.apache.org/docs/2.0/sections.html#file-and-web

您的问题 1b,mod_rewrite 可以在授权开始之前重写,如下所述:http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#InternalAPI

我不清楚为什么您的重写规则不起作用,但我通常会这样写:

RewriteRule ^/$ index.htm [L]

IIRC 因为在服务器 URL 和文件夹内总是有一个“/”,但我在这一点上可能是错误的。

关于 Apache ,.htaccess : FilesMatch matches URIs or real file names?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5747244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com