当前位置:编程学习 > C#/ASP.NET >>

难题:windows系统下怎么实现没有后缀名(无扩展名)的URL重写,除了用路由和建立默认文件夹,要求能任意改写URL

windows系统下怎么实现没有后缀名(无扩展名)的URL重写,除了用路由和建立默认文件夹,要求能任意改写URL
为什么我要强调这个,因为似乎现在还没有解决方案,网上也没有找到,听说linux unix等其它系统下可以
比如我的要求是wangzhan.com/user/xiaoming 不能建立叫xiaoming的文件夹 因为用户参数非常多,总不能每个都建立文件夹吧 --------------------编程问答-------------------- 现在的csdn改版已经做到这样,但用得是nginx,不知道是不是windows系统 --------------------编程问答-------------------- 沙发 --------------------编程问答-------------------- 项目直接用asp.net mvc4.0做不就完了吗 --------------------编程问答--------------------
引用 3 楼 yzj714839128 的回复:
项目直接用asp.net mvc4.0做不就完了吗

这个就是用的路由吧,我看过MVC的结构,虽然代码简洁,但是我觉得它适合分工协作,文件目录结构体系太过死板。同时根据你的提议找了一篇文章。
http://www.cnblogs.com/fish-li/archive/2012/02/21/2361982.html

这篇文章里提到的两点也是我的需求关键部分,如下:
1、Url参数中指定的字符串,可以对应一个aspx页面。也可以不对应aspx页面。
   我的也是这样,我想实现任意的URL改写,特别是没有后缀(无扩展名的URL),同时程序目录中不一定要对应的ASP.NET单页,比如网址abc.com/yonghu/zhuce  abc.com/yonghu/denglu 甚至方便随时更改成abc.com/user/register abc.com/member/demo这样 但是要求程序文件目录中不一定要有yonghu、zhuce、denglu、user、register、member、demo这些文件夹(例如:我的程序项目中只有register.aspx和login.aspx这两个页面)

2、然而,事实却没有我想像那么好,还是有很多人给我发邮件,问我示例为什么不能运行。
不能运行的环境也是让我完全没有想到的: 有人把它部署到了IIS6,扩展名的映射遇到问题。
   我的windows2003+IIS6组合,用MVC可能也有这个问题,而且要实现没有扩展名的URL据我所知应该没这么简单,cnblogs博客园的站长dudu做过尝试(有空可以去看看他的日志),听说没有后缀的URL会造成什么托管bug崩溃,在映射上形成性能瓶颈,我确切的要求是在windows系统上用IIS6或者nigix或者apache等其它服务器实现这个功能(因为没用过linux等其它服务器,不然这个问题据说用Linux或者U
nix系统可以很方便地实现没有后缀的URL,我也没折腾过其它操作系统) --------------------编程问答-------------------- 继续顶起来,希望有高手指教 --------------------编程问答-------------------- 没人知道吗,还有个问题 一直觉得ASP.NET开发外网在速度方面很难和PHP、ASP比拼,你们觉得呢 --------------------编程问答-------------------- 晕,你既然都知道是“URL重写”,居然还找不到东西??

15年前asp滴人都知道怎么实现重写,当然那个时候使用的是iis插件
但是net出来以后,url重写自己就能实现,当时没有啥路由这个词,当时叫“伪静态”(别认为伪静态就一定要有后缀,那个无法是接控管道,按规则使用正则提取路径和参数,拼接好正确的参数以后转向访问并输出,这也是现在路由表的原始雏形)

所以你的问题问滴非常奇怪,10几年就有的玩意,你居然找不到任何手段

ps:顺带提一下,就算你找不到当年伪静态的资料,那么现在的资料里,那一份上说了路由表是mvc专用滴呢,路由表同样可以使用在webform里面,这点msdn说的很清楚了 --------------------编程问答-------------------- 来吧看微软正统的说法是什么

http://msdn.microsoft.com/zh-cn/library/cc668201(v=vs.90).aspx --------------------编程问答-------------------- 我们的MVC系统的一种前端采用的是asp.net4.0Webform结合动态路由方式实现,
早期的IIS不支持无后缀名的url,
我们对此作了向前兼容的尝试,也就是针对IIS版本对后缀进行处理,
可是url识别的问题虽然解决,但是页面呈现还是出一些莫名其妙的问题,
最后还是动员客户升级到windows2008,

如果成本允许,楼主可以考虑自己或者委托开发一个web服务器 --------------------编程问答--------------------
引用 8 楼 wanghui0380 的回复:

楼主的意思是如何再让早期的IIS实现对无后缀名的url响应 --------------------编程问答--------------------
引用 10 楼 microtry 的回复:
引用 8 楼 wanghui0380 的回复:

楼主的意思是如何再让早期的IIS实现对无后缀名的url响应

对啊,我知道MVC可以实现,但是我觉得MVC很死板,{reporttype}/{year}/{month}/{day}
/sales/2008/1/5 类似这种要建立对应的文件夹,
路由表同样可以使用在webform里面,这点msdn说的很清楚了 
是可以用,但这个也要建立相应文件夹,我的要求是能随意配置 比如我的定义访问的网址如下:
abc.com/dongwu/changjinglu → 实际对应网页abc.com/demo.aspx?name=kae
abc.com/dongwu/daxiongmao  → 实际对应网页abc.com/demo.aspx?name=ooio
abc.com/shuiguo/pingguo    → 实际对应网页abc.com/demo.aspx?name=apple
要求目录下不用建立dongwu shuiguo changjinglu daxiongmao pingguo这些文件
而且没有扩展名在windows下应用不影响性能,现在的CSDN估计不是windows 而且用的还是nginx --------------------编程问答-------------------- http://www.google.com.hk/search?hl=zh-CN&lr=lang_zh-CN&newwindow=1&safe=strict&tbo=d&as_qdr=all&tbs=lr%3Alang_1zh-CN&q=asp.net+%E8%87%AA%E5%AE%9A%E4%B9%89module+rewriteurl+&btnG=Google+%E6%90%9C%E7%B4%A2 --------------------编程问答--------------------
引用 12 楼 sp1234 的回复:
现在的CSDN估计不是windows 而且用的还是nginx 

ngix往往只是用来做web负载均衡用的,后边不一定是什么web服务器,并不一定是在它上面跑csdn。 --------------------编程问答--------------------
引用 12 楼 sp1234 的回复:
http://www.google.com.hk/search?hl=zh-CN&lr=lang_zh-CN&newwindow=1&safe=strict&tbo=d&as_qdr=all&tbs=lr%3Alang_1zh-CN&q=asp.net+%E8%87%AA%E5%AE%9A%E4%B9%89modul……

asp.net 自定义module rewriteurl
我的要求是无后缀无扩展名的重写,包括最后一个"/"斜杠也不能有,用自定义module这样会对性能有影响吗?
网上有哪个典型的优秀网站用这个?估计都没有啊! --------------------编程问答--------------------
引用 11 楼 technologyofsale 的回复:
路由表同样可以使用在webform里面,这点msdn说的很清楚了 
是可以用,但这个也要建立相应文件夹

不需要建立相应的文件夹,
不仅如此,你甚至连页面都不需要,
也就是说,只要用一个空白页面就可以映射成千上万的url,实际上微软asp.net自己就是这么做的

但是,如果你的url不想带后缀名,还是选择windows2008+IIS7吧 --------------------编程问答-------------------- asp.net的路由机制根本不要求你的站点非要建立什么文件夹来对应.
我们一直就是这么用的 --------------------编程问答--------------------
引用 16 楼 microtry 的回复:
asp.net的路由机制根本不要求你的站点非要建立什么文件夹来对应.
我们一直就是这么用的

我想你的网址结尾一定有一个斜杠“/”吧,我要的效果是和CSDN这样实现没有斜杠和任何后缀扩展名的,Windows平台、IIS和ASP(.NET)什么的好像还没这个解决方案 
现在整个互联网能实现的大多是其它操作系统(Linux等)、开发语言(PHP等)、Web服务器(Apache等) --------------------编程问答--------------------
引用 17 楼 technologyofsale 的回复:
我想你的网址结尾一定有一个斜杠“/”吧,……

没听说一定要斜杠结尾,
我们实际使用的url就像这个样子:


利用asp.net的路由机制就可以做到 --------------------编程问答-------------------- 楼上不要抬杠了。早期IIS版本是通过请求文件后缀名来判断的。如果后缀名是aspx ,就交给aspnet_isapi.dll 来处理。
像楼上那种空后缀,iis就不会交给asp.net来处理,你在asp.net中配置路由表又有什么用呢?

楼上的iis肯定是做了什么特殊处理。 --------------------编程问答-------------------- 楼主参考下这个
http://www.cnblogs.com/jpwar/archive/2008/03/07/1095415.html
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,