除了在IIS8中使用web.config之外,如何禁止访问所有目录?

时间:2017-01-04 10:27:23

标签: .htaccess iis url-rewriting yii2 web-config

我开发了一个基于Yii2的Web项目,因此除了子目录" web"之外,禁止访问所有文件和目录。

下面是项目目录struct:

.htaccess
composer.json
config/
    console.php
    web.php
commands/
controllers/
models/
runtime/
vendor/
views/
web/
    .htaccess   
    assets/         
    index.php

我已经通过.htaccess在apache下实现了这一点,它非常容易^ _ ^

的.htaccess

Order Allow,Deny
Deny from all

网/ htaccess的

Order Allow,Deny
Allow from All

但我现在需要在IIS8下部署这个项目,所以我尝试使用IIS管理将.htaccess转换为web.config,但转换结果为空。 我怎样才能做到这一点?感谢

1 个答案:

答案 0 :(得分:0)

IIS使用“请求筛选”模块来限制浏览器对作为应用程序组件的文件的访问。对于Web.config文件中的示例应用程序,该部分可能如下所示:

<security>
        <requestFiltering>
            <denyUrlSequences>
                <add sequence="engine" />
                <add sequence="inc" />
                <add sequence="info" />
                <add sequence="install" />
                <add sequence="module" />
                <add sequence="profile" />
                <add sequence="po" />
                <add sequence="sh" />
                <add sequence="theme" />
                <add sequence="tpl(\.php" />
                <add sequence="Root" />
                <add sequence="Tag" />
                <add sequence="Template" />
                <add sequence="Repository" />
                <add sequence="code-style" />
            </denyUrlSequences>
            <fileExtensions>
                <add fileExtension=".sql" allowed="false" />
                <add fileExtension=".pl" allowed="false" />
            </fileExtensions>
        </requestFiltering>
    </security>

请注意,您可以将此部分注释掉以进行安装,因为此过滤器会阻止安装脚本。

使用请求过滤的另一种方法是使用URL重写器模块为任何匹配的文件类型返回403错误。 URL重写器模块的优点是它使用正则表达式进行匹配。

        <rule name="Protect files and directories from prying eyes" stopProcessing="true"> 
            <match url="\.(engine|inc|info|install|module|profile|test|po|sh|.*sql|theme|tpl(\.php)?|xtmpl|svn-base)$|^(code-style\.pl|Entries.*|Repository|Root|Tag|Template|all-wcprops|entries|format)$" /> 
            <action type="CustomResponse" statusCode="403" subStatusCode="0" 
                statusReason="Forbidden" 
                statusDescription="Access is forbidden." /> 
        </rule>