拒绝访问除 index.html 和一些技术资产之外的所有文件

拒绝访问除 index.html 和一些技术资产之外的所有文件

我读过了这个类似的问题,但遗憾的是它不能完全解决我的问题。我的静态页面面向公众的部分具有以下文件夹结构:

/srv/htdocs/sub.domain.com/
├── 403.html
├── css
│   ├── bootstrap.min.css
│   ├── bootstrap-theme.min.css
│   └── style.css
├── fonts
│   ├── glyphicons-halflings-regular.eot
│   ├── glyphicons-halflings-regular.svg
│   ├── glyphicons-halflings-regular.ttf
│   ├── glyphicons-halflings-regular.woff
│   └── glyphicons-halflings-regular.woff2
├── index.html
├── js
│   ├── bootstrap.min.js
│   └── jquery.min.js
└── robots.txt

还有许多其他文件夹,但这些是我希望公开的内容。我的想法是允许无条件访问cssfontsjs文件夹,并允许个人index.html403.htmlrobots.txt文件。

<Directory "/srv/htdocs/sub.domain.com">
    Order Deny,Allow
    Deny from All
    <FilesMatch "(403|index)\.html">
         Allow from all
    </FilesMatch>

    <FilesMatch "robots\.txt">
         Allow from all
    </FilesMatch>

    <FilesMatch "/$">
         Allow from all
    </FilesMatch>
</Directory>

<DirectoryMatch "/(css|js|fonts)" >
    Order Allow,Deny
    Allow from All
</DirectoryMatch>

我尝试使用“空文件”规则允许 root 用户访问"/$",但不起作用。如果我仅使用该规则"""$"Apache 授予对所有文件的访问权限。

上网时http://sub.domain.com/收到的是消息403 Forbidden而不是index.html内容。我错过了什么规则?

答案1

如果你愿意,你可以使用 mod_rewrite 来实现这一点,而不是使用你已有的:

RewriteEngine on
#if matching any of the approved URLs
RewriteCond %{REQUEST_URI} ^/(css|js|fonts).* [OR]
RewriteCond %{REQUEST_URI} ^/(403|index)\.html$ [OR]
RewriteCond %{REQUEST_URI} ^/robots.txt$ [OR]
RewriteCond %{REQUEST_URI} ^/$ 
#allow the request to pass through
RewriteRule .* - [L]

#otherwise, if the person's IP doesn't match (replace the 123 IP with the IP you want to permit)
RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123$
#send 403 forbidden (i.e. the [F] flag)
RewriteRule .* - [F,L]

相关内容