博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用URL重写实现参数目录化
阅读量:6642 次
发布时间:2019-06-25

本文共 1991 字,大约阅读时间需要 6 分钟。

参数目录化,就是将 类似 http://www.abc.com/store/store.aspx?id=1024 这样的网址,对外改为 http://www.abc.com/1024

要实现这种功能,可以用以下三种方式(应该不仅限这三种吧!)

 

1、用微软的 Microsoft URL 重写模块 2.0,但只能给IIS7使用,IIS6不行。

 

64位:

32位:

2、isapi_rewrite

但完全版有日期限制,如果不想掏钱,有大牛破解了,可以用下面这个:

3、urlrewriter.net

这个有源代码,可以自己编译。

 

机缘巧合之下,我用了方法一 和 二。因为开发机器是WIN7,装了IIS7,所以用微软的重写模块;而服务器是WIN2003,就用了isapi_rewrite。

下面就这两种方法分别做一点心得介绍。

事实上,这两种方法大同小异,IIS基本上不用怎么配置,没有网上说的那么玄妙,又是勾选,又是映射,又是权限之类,关键在于要写对正则表达式。

 

1、微软的 Microsoft URL 重写模块 2.0

安装好之后,就可以改写网站下的web.config了。

 

关键是要 写对正则表达式 ,否则系统会报无法找到资源的404错误。真他妈的。就不能报点别的错误?害得我在网上疯狂搜索,以为差了哪里没配置,还差点将IIS重装了。网上也不会告诉你这个答案,他们只是建议将文件是否存在的选项去掉,诸如此类。

 

 

HTTP 错误 404.0 - Not Found

您要找的资源已被删除、已更名或暂时不可用。

 

 

2、isapi_rewrite

安装之后,就可以直接使用了。打开IIS6,点击网站-属性,会看到:

点 EDIT,会在网站根目录下生成一个.htaccess文件。在里面编写我们的正则表达式:

 

# Helicon ISAPI_Rewrite configuration file# Version 3.1.0.87RewriteRule ^([1-9][0-9]*)/eurl\.axd/  /store/store.aspx\?id=$1 [NC]RewriteRule ^([1-9][0-9]*)/([^/]*)?/? /store/store.aspx\?id=$1&$2 [NC]

 

 

其正则表达式的语法,似乎跟微软的URL重写模块没有多大区别,并且它还自带了一个正则表达式测试器,打开 .htaccess文件的时候,在编辑器菜单里可以看到,RegExp test

 

 

但我发现有2点需要注意:

1、正则表达式里,不能出现问号(“\?”),否则一定匹配失败,但正则表达式绝对正确,放在其他正则表达式测试器里测试,也OK,但在这里就不行。不知道什么原因。翻遍互联网,有个兄弟说:

这是因为 url 里面 ? 后面的不被 apache 认为是 requested uri 的内容,所以你怎么写都无法取得。
建议你修改 url 格式:比如把 ? 去掉;或者改变获取方式:比如改成 RewriteRule /?(.*)$ /reg.php?id=$1&%

帖子:

但我这个是IIS耶!真搞不懂,不管了。所以我原本想将优化后的地址设为:http://www.abc.com/1024?p=1&c=1的,结果怎么试都不成功,最后只能放弃问号,改成:http://www.abc.com/1024/p=1&c=1

2、IIS6 + .net 4的情况下,IIS会自动在无后缀(什么叫无后缀?不懂)地址后加上 "/eurl.axd/guid号",刚好跟我机器一样。本来这个在ASP.NET处理过程中,会被自动去掉,但在这里,经过转向后,居然还保留了下来,我在测试过程中,在目标页面显示 Request.QueryString,居然可耻地显示出这种不速之客:

 

网上有文章介绍用修改注册表的方式来屏蔽

但我想着以后可能会采用MVC模式,所以只在写正则表达式时将这个因素考虑进去了:

RewriteRule ^([1-9][0-9]*)/eurl\.axd/  /store/store.aspx\?id=$1 [NC]

 

 

 

 

 

 

你可能感兴趣的文章
GPIO实验(一)
查看>>
安装Exchange2010
查看>>
java Socket 获取本地主机ip
查看>>
【经验分享】URL链接地址最长是多少?
查看>>
进度条脚本
查看>>
字符集--获取中文拼音
查看>>
GridView中实现CheckBox的全选
查看>>
2014年2月第一天
查看>>
自建Nuger Server拾遗
查看>>
configSections(配置文件)
查看>>
根据起止日期构建指定查询条件:第N周(yyyy-MM-dd/yyyy-MM-dd)
查看>>
MySql 里的IFNULL、NULLIF和ISNULL用法
查看>>
在IIS8添加WCF服务支持
查看>>
ASP.NET MVC学习之路由篇(1)
查看>>
UML关系(泛化,实现,依赖,关联(聚合,组合))
查看>>
高级搜索 《第五篇》
查看>>
#include<unistd.h>头文件的理解
查看>>
Java String类中的intern()方法
查看>>
Mono for Android 篇二 使用Spinner 实现下拉列表读取Browser.BookmarksUri
查看>>
CentOS 下SSH无密码登录的配置
查看>>