如何拒绝所有访问权限并仅允许子域上的某些文件类型

时间:2015-01-16 11:45:31

标签: .htaccess mod-rewrite

我有2个不同的域指向同一个根目录

www.domain1.co.uk
a.domain2.com

这样做的目的是提供来自a.domain2.com的静态内容

我不希望任何人通过a.domain2.com访问我的网站所以我只需要允许某些文件类型(js | css | jpg | png | gif | avi | wmv | mpg | wav | mp3 | txt | rtf | doc | xls | rar | zip | tar | gz | tg)并拒绝其他所有内容以阻止通过a.domain2.com加载完整网站

显然.htaccess文件位于根目录中,并且对两个域都有效。如何创建规则以实现上述描述。

我还需要指出,在重写之后(将非www重定向到www)已经存在于此.htaccess

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.domain1\.co.uk [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^(.*) http://www.domain1.co.uk/$1 [L,R=301]

2 个答案:

答案 0 :(得分:0)

您可以在.htaccess

中使用它
RewriteEngine On

#prohibits other types with a.domain2.com 
RewriteCond %{HTTP_HOST} ^a\.domain2\.com$ [NC]
RewriteCond %{REQUEST_FILENAME} !\.(?:js|css|jpg|png|gif|avi|wmv|mpg|wav|mp3|txt|rtf|doc|xls|rar|zip|tar|gz|tg)$ [NC]
RewriteRule ^ - [F]

# no other rewrite for a.domain2.com
RewriteCond %{HTTP_HOST} ^a\.domain2\.com$ [NC]
RewriteRule ^ - [L]

# add www and/or change domain
RewriteCond %{HTTP_HOST} !^www\.domain1\.co.uk [NC]
RewriteRule ^(.*) http://www.domain1.co.uk/$1 [L,R=301]

答案 1 :(得分:0)

我认为你不应该为此问题使用.htaccess或mod_rewrite。而是在主配置文件(httpd.conf)中使用VirtualHost块,并拒绝访问任何不以特定扩展名结尾的内容:

NameVirtualHost *:80
<VirtualHost *:80>
  DocumentRoot "blah"
  ServerName www.domain1.co.uk
</VirtualHost>

<VirtualHost *:80>
  DocumentRoot "blah"
  ServerName a.domain2.com

  <FilesMatch ".+\.(?!(js|css|jpg|png|gif|avi|wmv|mpg|wav|mp3|txt|rtf|doc|xls|rar|zip|tar|gz|tg)$)[^\.]+?$">
    Order allow,deny
    Deny from All
  </FilesMatch>
</VirtualHost>