iis7 url 重写(删除 .aspx)并出现错误 404

iis7 url 重写(删除 .aspx)并出现错误 404

我遇到了 IIS7 URL 重写模块的问题,当我添加以下规则时,所有页面都出现 404 错误。

<rule name="Remove .aspx" stopProcessing="true">
<match url="(.+)\.aspx" />
<action type="Redirect" redirectType="Permanent" url="{R:1}" />

我只想删除所有文件扩展名。我对此感到困惑,也许有人知道解决方案?

提前致谢。

问候,eimeim

答案1

通过将用户重定向到不带 .aspx 的 URL 来从 URL 中删除 .aspx 只是解决方案的一部分。

如果您执行该重定向,如果 URL 不包含正确的名称(不带 .asp 扩展名),服务器如何知道要执行哪个脚本(带 .aspx 扩展名)?因此您必须添加规则来修复该问题。方法是制定一条匹配任何 URL 但不匹配任何现有文件或目录的规则。如果遇到这种情况,我们可以假设它可能是指向 ASPX 页面的重写链接,因此我们重写 URL 以添加 .aspx。如果它不是 ASPX 页面,则无论如何都会导致 404。

为了使所有功能都能与现有代码配合使用,您必须重写页面的响应,删除所有对 .aspx 页面的现有引用,使其不包含扩展名。否则,您将获得大量不必要的重定向,并且表单发布到 aspx 页面将不再有效。

最后但同样重要的一点是,您必须禁用压缩,因为在打开压缩的情况下,出站重写不起作用。

这一切都会导致您的 web.config 出现以下重写规则:

<system.webServer>
    <rewrite>
        <rules>
            <rule name="Remove .aspx from URL" stopProcessing="true">
                <match url="(.*)\.aspx$" />
                <action type="Redirect" url="/{R:1}" />
            </rule>
            <rule name="Add .aspx for non-existing files or directories">
                <match url="(.*)" />
                <conditions>
                    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                </conditions>
                <action type="Rewrite" url="/{R:0}.aspx" />
            </rule>
        </rules>
        <outboundRules>
            <rule name="Remove .aspx from links in the response" preCondition="Only for HTML">
                <match filterByTags="A, Area, Base, Form, Frame, IFrame, Link, Script" pattern="(.*)\.aspx(\?.*)?$" />
                <action type="Rewrite" value="{R:1}{R:2}" />
            </rule>
            <preConditions>
                <preCondition name="Only for HTML">
                    <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
                </preCondition>
            </preConditions>
        </outboundRules>
    </rewrite>
    <urlCompression doStaticCompression="false" doDynamicCompression="false" />
</system.webServer>

相关内容