asp.net - IIS URL 重写仅在一页中工作

标签 asp.net iis friendly-url

我已经通过 IIS 定义了一个 URL 重写规则。基本上它会变成这样:

Article.aspx?ID=1&FriendlyURL=whatever

进入

/1/whatever

请注意,重定向工作正常,但除非我在 Article.aspx 页面内,否则 URL 重写(页面内的链接)不会被翻译。

如何使重写规则应用于所有页面而不是仅应用于一个页面?我在 Web.Config 的书面规则下方发布,供您引用。谢谢。

<system.webServer>
    <rewrite>
        <outboundRules>
            <rule name="OutboundRewriteUserFriendlyURL1" preCondition="ResponseIsHtml1">
                <match filterByTags="A, Form, Img" pattern="^(.*/)Article\.aspx\?ID=([^=&amp;]+)&amp;(?:amp;)?FriendlyURL=([^=&amp;]+)$" />
                <action type="Rewrite" value="{R:1}{R:2}/{R:3}/" />
            </rule>
            <preConditions>
                <preCondition name="ResponseIsHtml1">
                    <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
                </preCondition>
            </preConditions>
        </outboundRules>
        <rewriteMaps>
            <rewriteMap name="Article Rewrite">
                <add key="Article.aspx?ID=1&amp;FriendlyURL=whatever" value="/1/whatever" />
            </rewriteMap>
        </rewriteMaps>
        <rules>
            <rule name="RedirectUserFriendlyURL1" stopProcessing="true">
                <match url="^Article\.aspx$" />
                <conditions>
                    <add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" />
                    <add input="{QUERY_STRING}" pattern="^ID=([^=&amp;]+)&amp;FriendlyURL=([^=&amp;]+)$" />
                </conditions>
                <action type="Redirect" url="{C:1}/{C:2}" appendQueryString="false" />
            </rule>
            <rule name="RewriteUserFriendlyURL1" stopProcessing="true">
                <match url="^([^/]+)/([^/]+)/?$" />
                <conditions>
                    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                </conditions>
                <action type="Rewrite" url="Article.aspx?ID={R:1}&amp;FriendlyURL={R:2}" />
            </rule>
        </rules>

    </rewrite>
</system.webServer>

最佳答案

所以我最终不得不通过在代码中设置“href”属性来对链接进行硬编码以使其对 url 友好。

像这样:

 <a href='/1/hello-world/'>Read the "Hello World" Article</a>

谢谢。

关于asp.net - IIS URL 重写仅在一页中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18620949/

相关文章:

c# - 在 C# 中的 Repeaters 中更改数据绑定(bind)控件的值

c# - WebAPI 2 中的 DefaultInlineConstraintResolver 错误

sql-server - SQL Server 2014 和 Windows 10 的 Crystal Reports 数据库登录失败

javascript - 从 iOS 的控制中心隐藏 HTML 视频 URL

c# - 将 SignalR Hub 与 ASP.NET MVC 5 项目一起使用时,如何访问用户在 Identity 2 中的声明?

javascript - 如何在 javascript 中验证和限制数字数据的 asp.net 文本框控件的长度?

iis - app_offline.htm 会停止当前请求还是只是新请求?

apache - 使用 HTACCESS 的 SEO 友好 URL

javascript - .htaccess RewriteRule 在 javascript 中添加为非斜杠的多个参数

php - 如何使用 php 和 htaccess 创建 seo 友好的 url?