嘿,我有一个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)
答案 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:
如果您在一台开发计算机上测试多个网站(具有不同的“DOCUMENT_ROOT”文件夹),请右键单击列表中的每个网站,编辑绑定,并将各个网站设置为在不同的端口号下运行。然后,您可以使用(例如)访问各种网站:http-colon-slash-slash localhost:81
答案 2 :(得分:0)
我从另一个角度来看这个(知道很少的PHP,但IIS和Azure很好)。我不知道为什么你的项目结构是这样的,所以我只是假设已经出于某种原因。我只想指出,根据我的经验,有一个子文件夹,你想要作为根工作,而不只是在根目录下,这有点不典型。
无论如何,我将看到的技术称为重写或路由,它允许您从标准中更改URL解析和传递到执行页面的方式。 Stackoverflow有很多关于它的帖子你可能想要搜索,这里有一个很好的IIS URL Rewriting vs URL Routing,它给出了两种不同类型的路由以及使用位置的答案。
你可以在web.config中完成它,它可以让你实现你想要的。