【发布时间】:2022-01-22 08:40:30
【问题描述】:
我有这个目录结构:
./project/
├── docs/
├── framework/
├── .git/
├── .gitignore
├── .htaccess
└── web/
地址:
http://demo.example.com/project或http://project.demo.example.com
我的项目前端文件位于web 路径中。
我想阻止对除web 文件夹之外的所有文件和文件夹的访问。
显然这应该由.htaccess 完成。
最初有使用Directory 或DirectoryMatch 的解决方案,但在.hatccess 中不允许使用这些解决方案。所以我不得不使用RewriteRule。
我也不希望它与project 名称相关联。
我找到了这个命令:
RewriteRule (docs|framework|\.git|\.gitignore|\.htaccess)(/.*)?$ - [F,NC]
这看起来不错。
为列出的地址返回 403 Forbidden。它也适用于子文件夹。
但主要问题是文件夹可能会改变。所以我决定更改策略并将其称为除web 之外的所有文件夹。
为此,我写了这个:
RewriteRule (?!web)(/.*)?$ - [F,NC]
但这并不涵盖所有情况。
事实上,它适合所有模式!
【问题讨论】:
-
也许
^(?!(?:.*/)?web)(.*)可以。 -
请注意,您链接到的“MWL htaccess 测试器”假定
.htaccess文件位于文档根目录中,而不是在您在此处使用的子目录中(这可能是您'已经从你的正则表达式中省略了字符串锚的开始?)。 -
感谢所有评论和回复的朋友。我用另一种方式解决了这个问题。我在项目前级别定义了这样的规则,
demo目录:RewriteEngine On Options -Indexes RewriteRule ^(project1|project2|project3)(/.*)?$ - [F,NC]这允许项目只能通过指向主web目录的子域访问。
标签: regex apache .htaccess mod-rewrite