`
whitesmith
  • 浏览: 16798 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

url静态映射及回发处理

阅读更多
URL重写是截取传入Web 请求并自动将请求重定向到其他 URL 的过程。

比如:浏览器发来请求 http://localhost:90/URLRewriter/1.html ,

服务器自动将这个请求中定向为http://localhost:90/URLRewriter/url.aspx?id=1

URLRewriter下载编译后提取其中的URLRewriter.dll和ActionlessForm.dll

一、URL重写

项目引用URLRewriter.dll

web.config配置:

代码
<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
  <configSections>
    <section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
  </configSections>
 
  <RewriterConfig>
    <Rules>
      <RewriterRule>
        <LookFor>~/URLRewriter/(.[0-9]*)\.html</LookFor>
        <SendTo>~/URLRewriter/url.aspx?id=$1</SendTo>
      </RewriterRule>
      <RewriterRule>
        <LookFor>~/web</LookFor>
        <SendTo>~/URLRewriter/url.aspx</SendTo>
      </RewriterRule>
    </Rules>
  </RewriterConfig>
 
  <system.web>
    <httpHandlers>
      <!--URLRewriter begin 使用 HTTP 处理程序执行重写-->
      <!--<add verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
      <add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />-->
      <!--URLRewriter end-->
    </httpHandlers>
       
    <httpModules>
      <!--URLRewriter begin 使用 HTTP 模块执行重写 -->
      <add type="URLRewriter.ModuleRewriter, URLRewriter" name="ModuleRewriter"/>
      <!--URLRewriter end-->
    </httpModules>
  </system.web>
 
</configuration>
IIS配置:

网站--属性--主目录--配置--插入--C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll

将文件是否存在 勾去掉

二、处理PostBack回发

ActionlessForm.dll以重写Form的方式用于处理PostBack回发后URL变为原始地址

项目引用ActionlessForm.dll在页面中注册一下

<%@ Register TagPrefix="skm" Namespace="ActionlessForm" Assembly="ActionlessForm" %>

将页面中的<form runat="server"></form>替换成:<skm:form id="form1" runat="server"></skm:form>

注:以这种方式处理回发将会在设计器中查看的时候为错误提示Form不可用

所以采用以下方法处理:

在微软的URLRewriter类库中添加以下类之后编译


代码
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

/// <summary>
/// FormRewriter 的摘要说明
/// </summary>
namespace URLRewriter.Form
{
    public class FormRewriterControlAdapter : System.Web.UI.Adapters.ControlAdapter
    {
        public FormRewriterControlAdapter()
        {
        }

        protected override void Render(HtmlTextWriter writer)
        {
            base.Render(new RewriteFormHtmlTextWriter(writer));
        }
    }

    public class RewriteFormHtmlTextWriter : HtmlTextWriter
    {
        public RewriteFormHtmlTextWriter(HtmlTextWriter writer)
            : base(writer)
        {
            base.InnerWriter = writer.InnerWriter;
        }
        public RewriteFormHtmlTextWriter(System.IO.TextWriter writer)
            : base(writer)
        {
            base.InnerWriter = writer;
        }

        public override void WriteAttribute(string name, string value, bool fEncode)
        {
            //If the attribute we are writing is the "action" attribute, and we are not on a sub-control,
            //then replace the value to write with the raw URL of the request - which ensures that we'll
            //preserve the PathInfo value on postback scenarios
            if (name == "action")
            {
                HttpContext context = HttpContext.Current;
                if (context.Items["ActionAlreadyWritten"] == null)
                {
                    //We will use the Request.RawUrl property within ASP.NET to retrieve the origional
                    //URL before it was re-written.
                    value = context.Request.RawUrl;
                    //Indicate that we've already rewritten the <form>'s action attribute to prevent
                    //us from rewriting a sub-control under the <form> control
                    context.Items["ActionAlreadyWritten"] = true;
                }
            }
            base.WriteAttribute(name, value, fEncode);
        }
    }

}
在App_Browsers文件夹下创建Form.browser

代码
<browsers>
  <browser refID="Default">
    <controlAdapters>
      <adapter controlType="System.Web.UI.HtmlControls.HtmlForm"
               adapterType="URLRewriter.Form.FormRewriterControlAdapter" />
    </controlAdapters>
  </browser>
</browsers>
这样就不需要引用ActionlessForm.dll也不需要改变Form了,只要引用URLRewriter.dll就可以了

三、在处理重写成html的时候本来网站中的html页面将会不能使用

使用以上方式将不存在找个问题

如果还不行可以在<compilation debug="true">节点下添加

<buildProviders>
        <add extension=".html" type="System.Web.Compilation.PageBuildProvider" />
</buildProviders>

在<httpHandlers>节点下添加(如果之前使用的是http处理程序执行重写的,请写在前面)

<add path="*.html" verb="*" type="System.Web.UI.PageHandlerFactory" validate="true"/>
分享到:
评论

相关推荐

    SpringMVC入门很简单之URL映射规则

    它的URL映射规则是SpringMVC处理HTTP请求的核心机制,使得开发者能够灵活地将URL与控制器方法关联起来,实现请求的分发。 首先,理解SpringMVC的请求处理流程至关重要。当一个HTTP请求到达服务器时,...

    13. 处理静态资源(自定义资源映射)【从零开始学Spring Boot】

    在Spring Boot应用中,处理静态资源是开发Web应用时常见的任务。静态资源通常包括HTML、CSS、JavaScript等文件,它们不需服务器动态处理,而是直接发送给客户端。本篇文章将探讨如何自定义资源映射来更好地管理和...

    jsp实现URL伪静态.rar

    这样,虽然用户看到的是静态化的URL,但实际处理请求的是JSP。 3. **路径解析** 在JSP页面中,我们需要解析URL中的路径信息,以获取动态数据。比如,从"/article/123.html"中提取出文章ID"123",然后根据这个ID从...

    使用URL映射地址导航Web页面

    URL映射是将友好的、可读性强的URL与实际服务器上的文件路径或处理程序进行关联的过程。这种技术在现代Web应用程序中广泛使用,为用户提供更直观、更易于记忆的链接,同时也有助于搜索引擎优化(SEO)。本文将深入...

    url routing 微软实例 伪静态

    首先,URL Routing是一种URL映射机制,它允许我们将任意的URL模式映射到特定的处理程序或控制器方法。在ASP.NET中,URL Routing主要由Global.asax文件中的RegisterRoutes方法进行配置。例如,`routes.MapPageRoute(...

    UrlReWrite(Url重写或伪静态)完美示例源码

    描 述:UrlReWrite(Url重写或伪静态)完美示例源码 UrlReWrite(Url重写或伪静态)完美示例源码,已利用ActionlessForm解决原始地址form回传的问题 例如:/products.aspx?category=books 转换为/products/Books....

    urlrewrite静态页面的使用例子

    通过定义规则,我们可以将复杂的动态URL转换为简洁的静态形式,或者反之,将静态URL映射到动态处理逻辑。 1. **安装与配置**:要使用`urlrewrite`,首先需要将`urlrewritefilter`的jar文件添加到项目的类路径中。在...

    FIS 静态资源映射表与PHP结合-PHP

    FIS 静态资源映射表是 FIS 中一个重要的概念,它记录了文件依赖、打包、URL 等信息,相当于一个资源的索引表,使得资源管理更加高效和有序 。 在 PHP 环境中,FIS 静态资源映射表可以通过特定的方法与 PHP 结合使用...

    URL伪静态的准备资料.rar

    URL伪静态技术的本质是将动态页面的请求转换为静态页面的路径形式,但实际上服务器仍然处理动态脚本。通过设置服务器配置或使用URL重写模块(如Apache的mod_rewrite,Nginx的rewrite),将用户访问的静态化URL解析为...

    [错误代码:0x80070002]IIS7及以上使用伪静态程序报错404.docx

    IIS7 及以上版本伪静态程序报错 404 的解决方法包括关闭 URL 重写(伪静态)网站、添加通配符脚本映射和正确配置应用程序池。通过这些方法,可以解决 IIS7 及以上版本伪静态程序报错 404 的问题。

    ecshop2.72 在IIS7环境下配置Rewrite (URL 静态化)规则工具及方法

    在IT行业中,URL静态化是一种优化网站性能和SEO(搜索引擎优化)的重要技术。ECSHOP 2.7.2是一款流行的开源电商系统,而IIS7是微软提供的强大Web服务器。本文将详细介绍如何在IIS7环境下为ECSHOP配置Rewrite规则,...

    urlrewrite重写URL伪静态请求路径.

    标题 "urlrewrite重写URL伪静态请求路径" 涉及到的是Web开发中的一个重要概念——URL重写,这是为了优化网站的SEO(搜索引擎优化)和用户体验而进行的一种技术手段。URL重写允许我们将复杂的动态URL转换为简洁、易于...

    jsp伪静态,javaweb实现伪静态

    它们可以通过定义规则,将用户请求的静态URL映射到实际的动态处理页面。 2. **JSP与Servlet结合**:在JSP中,我们通常使用Servlet来处理业务逻辑,然后转发到JSP页面进行视图渲染。在伪静态场景下,可以创建一个...

    asp.net伪静态完整代码

    URL重写技术允许开发者创建一个内部处理逻辑与外部显示的URL不一致的系统,通过隐藏实际的动态处理过程,使URL看起来像静态页面。 在ASP.NET中,可以使用`System.Web.Routing`命名空间中的`RouteTable`类来实现URL...

    网页静态化,伪静态页面

    通过创建重写规则,可以将动态URL重写为伪静态格式,同时保持原有的处理逻辑。 在实践中,开发者可以根据项目需求和资源状况,选择合适的静态化或伪静态化策略。对于大型、内容频繁更新的网站,可能需要结合两者,...

    查询映射查询映射查询映射查询映射查询映射查询

    这种方式可以处理更复杂、更长的参数,同时提供了更好的隐私保护,因为数据不是直接暴露在URL中。然而,POST请求不能被书签或直接分享,因为它依赖于HTTP头中的信息。 无论是GET还是POST,它们都是HTTP协议的一部分...

    伪静态的实现及伪静态的意义.ASP.NET

    在ASP.NET环境中,实现伪静态可以通过IIS的URL重写模块或者使用如Route等编程方式实现,将动态URL映射到对应的处理方法,从而达到伪静态的效果。总的来说,伪静态技术是现代Web开发中一种重要的优化手段,它在兼顾...

Global site tag (gtag.js) - Google Analytics