htaccess - 如何仅允许访问特定域的静态文件

htaccess - 如何仅允许访问特定域的静态文件

我们的想法是使用不同的域来提供 js、css、img 文件,因此我创建了以下域:

  • css.mydomain.com
  • js.mydomain.com
  • img.mydomain.com

主站点 URL 是 www.mydomain.com。当我通过主 URL 访问站点时,每个 img、css、js 文件都会通过子域传送给用户。一切正常。

问题是我可以使用以下域名之一访问主站点:css.mydomain.com、js.mydomain.com、img.mydomain.com

我想要拒绝所有不是 js、css、img 文件类型的请求。

我如何通过 htaccess 做到这一点?

答案1

由于我遇到了同样的问题,所以我想回答这个问题。

RewriteCond %{HTTP_HOST} ^css.mydomain.com$ [NC]
RewriteCond %{REQUEST_FILENAME} !\.(?:css)$ [NC]
RewriteRule ^ - [F]
RewriteCond %{HTTP_HOST} ^js.mydomain.com $ [NC]
RewriteCond %{REQUEST_FILENAME} !\.(?:js)$ [NC]
RewriteRule ^ - [F]
RewriteCond %{HTTP_HOST} ^img.mydomain.com$ [NC]
RewriteCond %{REQUEST_FILENAME} !\.(?:jpg|jpeg|png|gif)$ [NC]
RewriteRule ^ - [F]

因此第一行根据匹配的字符串检查主机(不区分大小写)。

第二行检查请求的文件是否与允许的扩展名不匹配(因此您可以通过添加或删除来更改允许的扩展名 - 用管道分隔)。正则表达式中的“?:”是非捕获组匹配。

如果请求与第二行中允许的扩展不匹配,则第三行将响应设置为“禁止”。

答案2

您可以使用 <files> 来执行此操作。此处对此进行了很好的解释: http://www.askapache.com/htaccess/using-filesmatch-and-files-in-htaccess.html

您可以先拒绝所有内容,然后只允许您想要的文件类型。

相关内容