【问题标题】:IIS document root in subfolder子文件夹中的 IIS 文档根目录
【发布时间】:2011-04-26 20:30:05
【问题描述】:

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

如何设置 IIS 7(可能使用 Web.config)以使用 document_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)

【问题讨论】:

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


    【解决方案1】:

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

    <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 方法,但我认为第一个解决方案将满足您的需求。

    【讨论】:

      【解决方案2】:

      修改基本设置和网站绑定。如果您只有一个网站,您可能只想编辑默认网站的基本设置:

      1. 打开 IIS 管理器
      2. 点击默认网站
      3. 在操作(右侧)下,选择基本设置
      4. 编辑物理位置。

      如果您在一台开发机器上测试多个网站(具有不同的“DOCUMENT_ROOT”文件夹),请右键单击列表中的每个网站,编辑绑定,并将各个网站设置为在不同的端口号下运行。然后,您可以使用(例如)访问各种网站:http-colon-slash-slash localhost:81

      【讨论】:

        【解决方案3】:

        我是从另一个角度来讨论这个的(对 PHP 知之甚少,但对 IIS 和 Azure 知之甚少)。我不知道为什么你的项目是这样组织的,所以我只是假设它出于某种原因必须是这样的。我只想指出,根据我的经验,拥有一个您希望作为根目录而不只是将其放在根目录的子文件夹有点不典型。

        不管怎样,我将研究的技术称为重写或路由,它可以让您改变 URL 解析和传递到执行页面的标准方式。 Stackoverflow 有很多关于它的帖子,您可能想浏览一下,这里有一篇很好的 IIS URL Rewriting vs URL Routing,它给出了两种不同类型的路由以及在哪里使用的答案。

        你可以在 web.config 中做,它应该可以让你实现你想要的。

        【讨论】:

          猜你喜欢
          • 2013-04-16
          • 2014-08-11
          • 2014-11-30
          • 2021-12-05
          • 2016-04-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-25
          相关资源
          最近更新 更多