IIS文件根目录在子文件夹中

时间:2011-04-26 20:30:05

标签: php iis iis-7 web-config azure

嘿,我有一个PHP Windows Azure项目,但我是IIS新手。我在根文件夹中有我的PHP库,在名为document_root的子文件夹中有index.php,样式表或javascripts等客户端文件。

如何设置IIS 7(可能使用Web.config)将document_root用作站点的默认文件夹(使root不可见),这样我就可以调用mydomain.tld /而不是mydomain.tld / document_root /

我用过:

<defaultDocument>
  <files>
    <clear />
    <add value="document_root/index.php" />
  </files>
</defaultDocument>

哪个工作正常但它只访问index.php并且无法找到像/document_root/css/default.css这样的文件(相对地址是css / default.css)

3 个答案:

答案 0 :(得分:2)

有两种方法可以做到这一点。简单的方法是使用IIS7中包含的URL重写模块。将请求重定向到Public文件夹(并禁止直接访问该文件夹)的示例:

<system.webServer>
    <rewrite>
        <rules>
            <clear />
            <rule name="blockAccessToPublic" patternSyntax="Wildcard" stopProcessing="true">
                <match url="*" />
                <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                    <add input="{URL}" pattern="/public/*" />
                </conditions>
                <action type="CustomResponse" statusCode="403" statusReason="Forbidden: Access is denied." statusDescription="You do not have permission to view this directory or page using the credentials that you supplied." />
            </rule>
            <rule name="RewriteRequestsToPublic" stopProcessing="true">
                <match url="^(.*)$" />
                <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                </conditions>
                <action type="Rewrite" url="public/{R:0}" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>

另一种方法是在部署PHP应用程序后更改IIS设置。为此,您需要覆盖Web角色的OnStart方法,但我认为第一个解决方案将满足您的需求。

答案 1 :(得分:1)

修改BASIC SETTINGS和WEBSITE BINDINGS。如果您只有一个网站,您可能只想编辑DEFAULT网站的BASIC SETTINCGS:

  1. 打开IIS管理器
  2. 点击默认网站
  3. 在“操作”(右侧)下,选择“基本设置”
  4. 编辑物理位置。
  5. 如果您在一台开发计算机上测试多个网站(具有不同的“DOCUMENT_ROOT”文件夹),请右键单击列表中的每个网站,编辑绑定,并将各个网站设置为在不同的端口号下运行。然后,您可以使用(例如)访问各种网站:http-colon-slash-slash localhost:81

答案 2 :(得分:0)

我从另一个角度来看这个(知道很少的PHP,但IIS和Azure很好)。我不知道为什么你的项目结构是这样的,所以我只是假设已经出于某种原因。我只想指出,根据我的经验,有一个子文件夹,你想要作为根工作,而不只是在根目录下,这有点不典型。

无论如何,我将看到的技术称为重写或路由,它允许您从标准中更改URL解析和传递到执行页面的方式。 Stackoverflow有很多关于它的帖子你可能想要搜索,这里有一个很好的IIS URL Rewriting vs URL Routing,它给出了两种不同类型的路由以及使用位置的答案。

你可以在web.config中完成它,它可以让你实现你想要的。