我读过了这个类似的问题,但遗憾的是它不能完全解决我的问题。我的静态页面面向公众的部分具有以下文件夹结构:
/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
还有许多其他文件夹,但这些是我希望公开的内容。我的想法是允许无条件访问css
、fonts
和js
文件夹,并允许个人index.html
、403.html
和robots.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]