【问题标题】:Redirect arbitrary request to directory to particular page in ASP.Net将任意请求重定向到 ASP.Net 中特定页面的目录
【发布时间】:2013-06-16 22:25:57
【问题描述】:

这个标题不是很具有描述性,但我不知道如何很好地表达我的问题。我想要做的是使用单个页面来解释多个 URL。这是一个示例:[domain]/name-of-question.aspx 显然不是站点服务器上的文件,但服务器的行为就像它一样。这种行为使页面更具可读性并且更容易添加书签。 我对解决方案的愿景是能够将请求重定向到某个目录到特定页面,同时将请求的页面名称作为 URL 参数附加到页面。这就是我的意思:[domain]/questions/name-of-question 重定向到[domain]/question.aspx?page=name-of-question。 我想这就是 reddit 自己发帖的方式,但他们不使用 ASP.Net 或 IIS。

这可能吗?如果可以,如何实现这种行为?如果有什么代码,请用C#写,因为我对VB.Net不是很了解。谢谢!

【问题讨论】:

    标签: asp.net iis redirect


    【解决方案1】:

    您需要使用 URL 重写来完成此操作。

    您必须创建一个重写规则,将任何请求重写到 [domain]/questions/{1} 到 [域]/question.aspx?{1}

    在 ASP.NET 中,您有 URL 重写器模块:http://www.iis.net/downloads/microsoft/url-rewrite

    该规则可能与此类似,并应用于 web.config 文件:

           <rewrite>
            <rules>
                <rule name="RewriteUserFriendlyURL1" stopProcessing="true">
                    <match url="questions/(.*)" />
                    <conditions>
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="question.aspx?{R:1}" />
                    <serverVariables>
                        <set name="{RESPONSE_CONTENT_TYPE}" value="image/png" />
                    </serverVariables>
                </rule>
            </rules>
        </rewrite>
    

    编辑:要更改内容类型,请在重写规则中添加 serverVariables 部分并授权在 IIS 管理器中设置该变量:

    【讨论】:

    • 谢谢!我理解除了conditions 标签之外的所有内容。你能解释一下吗?对我来说,这些标签似乎是矛盾的,但我不明白它们,所以我可能离题了。
    • 这些是针对边缘情况的,如果传入请求与磁盘上文件夹上的现有页面匹配,则不会重写请求,而是提供现有页面。根据您的描述,它们可以很安全地移除。
    • 我还有一个问题:如何将文档类型指定为图像?我正在使用它来提供图像,所以我不能将类型设为text/html。再次感谢!
    • 您需要在操作标签之后添加:
    【解决方案2】:

    如果您使用的是 ASP.NET 4.0+,那么这可能值得一读,因为 ASP.NET 路由和 URL 重写不一定是相互竞争的技术,而是潜在的互补功能。

    URL Rewriting vs. ASP.NET Routing

    【讨论】:

      猜你喜欢
      • 2016-03-31
      • 2012-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多