对于 IIS 7 来说非常新,因此如果这是一个简单的问题,请谅解。
我使用 Windows Server 2008 R2 上的 Webstart 安装程序安装了 Drupal 7。Drupal 制作了自己的自定义 404 和 403 错误页面。当我在服务器上打开 Internet Explorer 并测试这些页面时,它们运行正常。
但是,从远程机器上:
- 测试应该返回自定义 404 页面(即页面不存在)的内容,我在 Firefox 中看到一个空白页,并且当打开友好错误消息时,IE 会显示 403“网站拒绝显示此网页”,而关闭时则会显示空白页。
- 测试应返回自定义 403 页面的内容(通过未经身份验证的用户访问管理区域)以 IIS 样式返回“服务器错误。403 - 禁止:拒绝访问。”
我猜测这是一个权限问题,但我找不到任何可以更改的东西。
有任何想法吗?
谢谢,
弗雷德里克
答案1
问题出在您网站的 IIS web.config 文件中。
这篇文章帮助我解决了这个问题:http://www.evanclosson.com/devlog/iis7httperrorsconfigurationonlockdown。
请阅读有关 drupal 群组的这篇文章:http://groups.drupal.org/node/25421
否则,您可以使用下面的我的配置文件。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<!-- Don't show directory listings for URLs which map to a directory. -->
<directoryBrowse enabled="false" />
<rewrite>
<rules>
<rule name="Protect files and directories from prying eyes" stopProcessing="true">
<match url=".(engine|inc|info|install|module|profile|test|po|sh|.sql|postinst.1|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>
<rule name="Force simple error message for requests for non-existent favicon.ico" stopProcessing="true">
<match url="favicon.ico" />
<action type="CustomResponse" statusCode="404" subStatusCode="1" statusReason="File Not Found" statusDescription="The requested file favicon.ico was not found" />
</rule>
<!-- Rewrite URLs of the form 'x' to the form 'index.php?q=x'. -->
<rule name="Short URLS" stopProcessing="true">
<match url="^(.*)$" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
<add input="{URL}" pattern="^/favicon.ico$" ignoreCase="false" negate="true" />
</conditions>
<action type="Rewrite" url="index.php?q={R:1}" appendQueryString="true" />
</rule>
</rules>
</rewrite>
<httpErrors>
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" prefixLanguageFilePath="" path="/index.php" responseMode="ExecuteURL" />
<remove statusCode="403" subStatusCode="-1" />
<error statusCode="403" prefixLanguageFilePath="" path="/index.php" responseMode="ExecuteURL" />
</httpErrors>
<defaultDocument>
<!-- Set the default document -->
<files>
<remove value="index.php" />
<add value="index.php" />
</files>
</defaultDocument>
</system.webServer>
</configuration>