0

.NET 4 中 URL 重写的最佳解决方案是什么。我正在寻找一种简单的解决方案来重写 URL,例如

将“myurl.com/ApplicationName/Kohls”转换为“myurl.com/ApplicationName/index.html?store=Kohls”,这样我就可以通过查询字符串访问变量“Kohls”。

我目前正在使用 Global.asax,它一直在为上述情况工作 - 但在用户输入 myurl.com/Application 的情况下,我遇到了麻烦,在 Application 之后没有“/”或任何内容。

我目前有这个:

    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        String CurrentURLPath = Request.Path.ToUpper();

        Match nothingAfterRoot = Regex.Match(CurrentURLPath, @"/ApplicationName(/)?$", RegexOptions.IgnoreCase);
        if (nothingAfterRoot.Success)
        {
            HttpContext myContext = HttpContext.Current;
            myContext.RewritePath("/ApplicationName/Default.aspx?store=ABC");
        }
        else
        {
            Match match = Regex.Match(CurrentURLPath, @"/ApplicationName(/)?(\w)*$", RegexOptions.IgnoreCase);
            if (match.Success)
            {
                CurrentURLPath = CurrentURLPath.Trim('/');
                String store= CurrentURLPath.Split("ApplicationName/".ToCharArray())[1];
                HttpContext myContext = HttpContext.Current;
                myContext.RewritePath(String.Format("/ApplicationName/Default.aspx?store={0}", store));
            }
        }
    }
4

3 回答 3

2

.NET 4 中 URL 重写的最佳解决方案是什么

如果可以选择使用 MVC 框架。URL 重写是默认设置。

对于传统的 asp.net 站点,我将 UrlRewritingNet.UrlRewriter.dll 与以下内容一起用于我的 web.config 文件:

<configSections>
    <section name="urlrewritingnet" restartOnExternalChanges="true" 
        requirePermission="false" type="UrlRewritingNet.Configuration.UrlRewriteSection, 
        UrlRewritingNet.UrlRewriter" />
</configSections>

<system.web>
    <urlrewritingnet rewriteOnlyVirtualUrls="true" contextItemsPrefix="QueryString" 
         defaultPage="default.aspx" defaultProvider="RegEx"       
         xmlns="http://www.urlrewriting.net/schemas/config/2006/07">
        <rewrites>
          <add name="ArticleUrlRewrite" virtualUrl="^~/a-(.*)-([\w-]*)\.aspx" 
               rewriteUrlParameter="ExcludeFromClientQueryString" 
               destinationUrl="~/article.aspx?id=$1" ignoreCase="true" />
        </rewrites>
    </urlrewritingnet>
</system.web>
于 2012-07-19T22:07:54.203 回答
1

您可以使用 ShortURL-dotnet 将 bit.ly/XXXX 之类的 URL重写www.mysite.com/index.htm

它将默认错误页面更改为重定向文件,并且根据该值是否存在,它将您重定向到真实的 URL。

如果您对此解决方案感兴趣,可以在 http://sourceforge.net/projects/shorturl-dotnet/找到更多信息

using System;
using System.Web;

public partial class Redirection : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        ShortUrl.Container oShortUrl;

        if (ShortUrl.Utils.HasValue(Request.QueryString["page"].ToString())) // checks in case ISAPIRewrite is being used
        {
            oShortUrl = ShortUrl.Utils.RetrieveUrlFromDatabase(Request.QueryString["page"].ToString());
        }
        else // using IIS Custom Errors
        {
            oShortUrl = ShortUrl.Utils.RetrieveUrlFromDatabase(ShortUrl.Utils.InternalShortUrl(Request.Url.ToString()));
        }

        if (oShortUrl.RealUrl != null)
        {
            Response.Redirect(oShortUrl.RealUrl);
        }
        else
        {
            Response.Redirect("MissingUrl.aspx");
        }
    }
}
于 2012-07-19T22:17:42.497 回答
0

如上所述,如果可以选择,MVC 是一种很好的方法。

如果您运行的是 IIS 7,则可以使用 URL Rewrite 模块:

http://learn.iis.net/page.aspx/460/using-the-url-rewrite-module/http://www.microsoft.com/en-us/download/details.aspx?id=7435

如果您正在运行 IIS6,则可以使用上面提到的 urlrewritingnet,或者我更喜欢使用 IIRF:

http://iirf.codeplex.com/

mod-rewrite 的相似性和基于正则表达式的规则使其非常强大

于 2012-07-19T22:53:04.167 回答