将任意请求重定向到ASP.Net中的特定页面

时间:2013-06-16 22:25:58

标签: asp.net iis redirect

这个标题不是很具描述性,但我无法弄清楚如何很好地表达我的问题。我要做的是使用单个页面来解释多个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。谢谢!

2 个答案:

答案 0 :(得分:3)

您需要使用URL重写来完成此任务。

您必须创建一个重写规则,重写对[domain] / questions / {1}的任何请求 到[domain] /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管理器中设置该变量:

server variables allow server variable

答案 1 :(得分:0)

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

URL Rewriting vs. ASP.NET Routing