记一次Url重写_发布之后iis 404

把api封装完,客户要求app的url能不能不变(客户之前用的php的api开发app,已经开发了很多了,所以希望不改动url)。但是这个规则要求是:xx/api.php?s=/{controller}/{action}&{parms},而我的直接就是xx/{controller}/{action} ?parms。改动web api的路由却不能包含“?”这个特殊字符。而且api.php之后都是参数,而我action之后才是参数。所以必须重写Url。

 public class UrlWriter : IHttpModule
    {
        public void Init(HttpApplication context)
        {
            context.BeginRequest += new EventHandler(context_BeginRequest);
        }

        void context_BeginRequest(object sender, EventArgs e)
        {
            //获得当前页面请求管道的HttpApplication对象
            HttpApplication application = sender as HttpApplication;
            HttpContext context = application.Context;//获得上下文对象
            //string url = context.Request.Url.LocalPath;//获得URL(不包含域名和路径)
            string url = context.Request.Url.AbsoluteUri;//获得URL(不包含域名和路径)
            //api.php?s= /controller/action&name=miyu&pwd=123 ---> controller/action?parms=
            Regex reg1 = new Regex("/WebForm2/[A-Z0-9a-z_]+");//注意文件夹与文件名称的大小写.
            if (url.Contains("api.php?s=")) //这种情况是匹配根据ID值来查看某个文章的内容。
            {
                url = url.Replace("api.php?s=", "|");
                var controller = "";
                var action = "";
                var parms = "";
                var baseurl = url.Split(‘|‘)[1]; //得到 类似于User/Login&.... 或者 User/Login ....
                if (baseurl.Contains("&"))
                {
                    var cap = baseurl.Split(‘&‘);
                    var ca = cap[0].Split(‘/‘);
                    controller = ca[0];
                    action = ca[1];
                    //User/login&name=miyu&pwd=123
                    parms = "?";
                    for (int i = 1; i <= cap.Length-1; i++)
                    {
                        if (i < cap.Length - 1) //共有cap.length-1个参数
                        {
                            parms += cap[i] + "&";
                        }
                        else
                        {
                            parms += cap[i] ;//最后一个参数 不需要再加&
                        }
                    }
                }
                else
                {
                    var ca = baseurl.Split(‘/‘);
                    controller = ca[0];
                    action = ca[1];
                }

                var newurl = string.Format("/api/{0}/{1}{2}", controller, action, parms);

                context.RewritePath(newurl); //前台的列表页就可以这样写:<a href=‘../WebForm2/<%#Eval("id")%>‘></a>
            }

        }

        public void Dispose()
        {
            throw new NotImplementedException();
        }
    }

然后在web.config中加入:

 <httpModules>
      <add name="UrlReWriter" type="AS.GroupOn.Web.UrlWriter, AS.GroupOn.Web, Version=1.0.0.0, Culture=neutral" />
    </httpModules>
  </system.web>

Debug的时候就ok了。但发布上了iis 却404 找不到资源。因为iis将.php 识别成了一个资源文件。

最后找到方法:站点--> 属性--》主目录

点击配置:

可执行文件就是我们的C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll。 (32位选32位的)

扩展名加入 .php

取消判断确认文件是否存在 就ok了。

时间: 2025-01-16 08:25:56

记一次Url重写_发布之后iis 404的相关文章

URL重写以后发布到IIS找不到页面

1.读取必须勾选,否则无法加载资源文件(img,css等) c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll

url重写后发布出错问题

iis7 配置urlrewriter重写失效的问题 在IIS7下,如果使用微软的 URLRewriter 重写控件则需要在WEB.CONFIG中配置以下信息 第一个配置: <configSections> <section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter"/> </conf

URL重写2.1.mis

概观 IIS URL重写2.1使Web管理员能够创建强大的规则来实现更容易让用户记住的网址,并使搜索引擎更容易找到.通过使用规则模板,重写映射,.NET提供程序和集成到IIS管理器中的其他功能,Web管理员可以轻松设置规则来定义基于HTTP标头,HTTP响应或请求标头,IIS服务器变量甚至复杂的URL重写行为程序规则.此外,Web管理员可以执行重定向,发送自定义响应,或基于重写规则中表达的逻辑来停止HTTP请求. 定义强大的规则来将复杂的URL转换成简单和一致的Web地址 URL Rewrite

thinkphp在IIS7.5+环境下部署出现的URL重写问题解决方法

简单点说,就是需要安装微软本身的url重写插件,可以使用IIS自带的web安装平台去查找安装.如果未安装这个平台,请自行百度搜索. 安装完成后,重启下IIS,在相应站点的IIS设置里会看到URL Rewrite 创建一个空的重写规则 然后在网站的根目录下,找到web.config文件打开 <rewrite>  <rules>  <rule name="OrgPage" stopProcessing="true">  <mat

IIS8如何安装和使用URL重写工具-URL Rewrite

原文:IIS8如何安装和使用URL重写工具-URL Rewrite 下载和安装URL Rewrite IIS8默认是没有安装URL重写工具的,必须要自己下载安装. 如果IIS上默认有安装Web平台安装程序,我们可以使用平台自动安装URL Rewrite重写工具,打开IIS(Internet 信息服务管理器),在管理器主页中找到管理项,打开Web平台安装程序,如下图: 在Web平台安装程序中选择产品>服务器,在列表中找到URL重写工具,点击添加后点击安装,即可自动安装好!如下图: 我们也可以手动下

IIS上发布站点后URL重写失效的解决方法

在发布网站时URL重写有可能会失效,如果失效的话就需要您设置一下IIS:1.Windows XP系统或Windows 2003系统等使用以下方法:>打开IIS,主目录-〉配置-〉映射-〉在窗体左侧中部,点击“添加”a按钮进入“添加/编辑应用程序扩展名映射”窗体.>在“添加/编辑应用程序扩展名映射”窗体中设置:可执行文件-〉选择“C:\WINDOWS\Microsoft.NET\Framework\v4.0.50727\aspnet_isapi.dll”(和.aspx扩展名的可执行文件相同)&g

ASP.NET MVC URL重写与优化(初级篇)-使用Global路由表定制URL

ASP.NET MVC URL重写与优化(初级篇)-使用Global路由表定制URL 引言--- 在现今搜索引擎制霸天下的时代,我们不得不做一些东西来讨好爬虫,进而提示网站的排名来博得一个看得过去的流量. URL重写与优化就是搜索引擎优化的手段之一. 假如某手机网站(基于ASP.NET MVC)分类页面URL是这样的, http://www.xxx.com/category/showcategory?categoryid=1000&view=list&orderby=price&p

Nginx反向代理、负载均衡、页面缓存、URL重写及读写分离详解

大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统为 CentOS 6.4 x86_64 , Nginx 是版本是最新版的1.4.2,所以实验用到的软件请点击这里下载:http://yunpan.cn/QXIgqMmVmuZrm 一.前言 在前面的几篇博文中我们主要讲解了Nginx作为Web服务器知识点,主要的知识点有nginx的理论详解.ngin

URL重写技术总结

概要:什么是url重写? URL 重写是截取传入 Web 请求并自动将请求重定向到其他 URL 的过程.比如浏览器发来请求 hostname/101.html ,服务器自动将这个请求中定向为http://hostname/list.aspx ?id=101. url重写的优点在于: 1.缩短url,隐藏实际路径提高安全性. 2.易于用户记忆和键入. 3.易于被搜索引擎收录. 正文:实现url重写的基本方法: 一. 下载ms的URLRewriter.dll,放到你的web程序的bin下 下载地址1