使用Url Rewrite 如果原始Url就带QueryString时候的一个问题
2005-09-24 19:14
513 查看
我重写了我的站点程序,在使用msdn内
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/urlrewriting.asp
关于Url Rewrite的方法
今天发现发现搜索引擎内对于原访问地址的记录还都在,而且有很多朋友通过这些地址访问
我当然不愿意然这些连接全部导向出错页面了,就想在Url Rewirte 内加个规则
<LookFor>为~/ShowArticle.Aspx\?ID=(\d+)
<SendTo>为~/Show.Aspx\?ID=(\d+)
当我这么加了后,访问该页面发现报错误404
仔细看Url Write的代码
最后发现
protected virtual void RewriterModule_AuthorizeRequest(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
Rewrite(app.Request.Path, app);//看这里,采用的是Request.Path
}
经过我测试
对一个地址http://localhost/test/requestpath.aspx/sss.aspx?id=2222访问
得到的结果是
request.path: /test/requestpath.aspx/sss.aspx
Request.Url.ToString(): http://localhost/test/requestpath.aspx/sss.aspx?id=2222
Request.PathInfo: /sss.aspx
Request.RawUrl: /test/requestpath.aspx/sss.aspx?id=2222
我将上面的代码改成
protected virtual void RewriterModule_AuthorizeRequest(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
Rewrite(app.Request.RawUrl, app);
}
执行我的程序,发现我的程序报错,提示的是我的参数不正确,
跟踪了一下发现QueryString传递了两个ID参数
经过跟踪代码,发现 internal static void RewriteUrl(HttpContext context, string sendToUrl, out string sendToUrlLessQString, out string filePath)内
if (context.Request.QueryString.Count > 0)
{
if (sendToUrl.IndexOf('?') != -1)
{
sendToUrl += "&" + context.Request.QueryString.ToString();
}
else
{
sendToUrl += "?" + context.Request.QueryString.ToString();
}
}
这里将context.Request.QueryString又给sendToUrl加了一边
如果去掉这部分那么虚拟的没有QueryString参数的页面将全部无法传递正确
最后只有在些Rewrite.config的时候
<!--
如果LookFor内包含QueryString那么在SendTo内就不必写QueryString,
因为上下文的content的context.Request.QueryString已经传递过去了
-->
<RewriterRule>
<LookFor>~/ShowArticle.Aspx\?ID=(\d+)</LookFor>
<SendTo><![CDATA[~/Show.aspx]]></SendTo><!--这里-->
</RewriterRule>
一切ok了,这样的地址都能访问了
http://www.aspxboy.com/ShowArticle.Aspx?ID=214
:-)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/urlrewriting.asp
关于Url Rewrite的方法
今天发现发现搜索引擎内对于原访问地址的记录还都在,而且有很多朋友通过这些地址访问
我当然不愿意然这些连接全部导向出错页面了,就想在Url Rewirte 内加个规则
<LookFor>为~/ShowArticle.Aspx\?ID=(\d+)
<SendTo>为~/Show.Aspx\?ID=(\d+)
当我这么加了后,访问该页面发现报错误404
仔细看Url Write的代码
最后发现
protected virtual void RewriterModule_AuthorizeRequest(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
Rewrite(app.Request.Path, app);//看这里,采用的是Request.Path
}
经过我测试
对一个地址http://localhost/test/requestpath.aspx/sss.aspx?id=2222访问
得到的结果是
request.path: /test/requestpath.aspx/sss.aspx
Request.Url.ToString(): http://localhost/test/requestpath.aspx/sss.aspx?id=2222
Request.PathInfo: /sss.aspx
Request.RawUrl: /test/requestpath.aspx/sss.aspx?id=2222
我将上面的代码改成
protected virtual void RewriterModule_AuthorizeRequest(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
Rewrite(app.Request.RawUrl, app);
}
执行我的程序,发现我的程序报错,提示的是我的参数不正确,
跟踪了一下发现QueryString传递了两个ID参数
经过跟踪代码,发现 internal static void RewriteUrl(HttpContext context, string sendToUrl, out string sendToUrlLessQString, out string filePath)内
if (context.Request.QueryString.Count > 0)
{
if (sendToUrl.IndexOf('?') != -1)
{
sendToUrl += "&" + context.Request.QueryString.ToString();
}
else
{
sendToUrl += "?" + context.Request.QueryString.ToString();
}
}
这里将context.Request.QueryString又给sendToUrl加了一边
如果去掉这部分那么虚拟的没有QueryString参数的页面将全部无法传递正确
最后只有在些Rewrite.config的时候
<!--
如果LookFor内包含QueryString那么在SendTo内就不必写QueryString,
因为上下文的content的context.Request.QueryString已经传递过去了
-->
<RewriterRule>
<LookFor>~/ShowArticle.Aspx\?ID=(\d+)</LookFor>
<SendTo><![CDATA[~/Show.aspx]]></SendTo><!--这里-->
</RewriterRule>
一切ok了,这样的地址都能访问了
http://www.aspxboy.com/ShowArticle.Aspx?ID=214
:-)
相关文章推荐
- Android内存分配/回收的一个问题-为什么内存使用很少的时候也GC
- 在使用JES8的时候遇到的一个问题
- 在使用JdbcTemplate.queryForMap(String )的时候发现一个问题.
- python默认的是17位小数的精度,但是这里有一个问题,就是当我们的计算需要使用更高的精度(超过17位小数)的时候该怎么做呢?
- 如果域控制器使用虚拟机的考虑--一个exchange的潜在问题
- 问题链接:HDU5319 Painter。 本题可以使用深度优先搜索求解。 红色刷子("R"刷子)按“\”的方向刷,蓝色刷子("B"刷子)按"/"方向刷。一个地方如果被两次刷到变成绿色("G"色)。
- SqlServer中使用Select语句给变量赋值的时候需要注意的一个问题
- 面试时候遇到的一个问题:禁用cookie后还能使用session吗?
- Url以.(点)结尾,在使用httpwebrequest读取的时候,微软会有一个bug……
- 罗马帝国开创了辉煌的人类文明,但他们的数字表示法的确有些繁琐,尤其在表示大数的时候,现在看起来简直不能忍受,所以在现代很少使用了。之所以这样,不是因为发明表示法的人的智力的问题,而是因为一个宗教的原因
- 当多个<router />使用同一个组件的时候,切换页面地址,页面不刷新的问题
- 问题: 在eclipse里使用ctr+shift+t打开一个类的时候,出现错误:Class file name must end with .class
- (hdu step 4.2.7)Kill the monster(有n个技能,求杀死怪物的技能的最小使用次数。在使用某一个技能的时候,如果怪物的能量值hp<=m,这时候造成的伤害值是原来的两倍)
- 给定一个单链表,从链表返回一个随机节点的值。 每个节点必须具有相同的选择概率。 跟进: 如果这个链表非常大,而且它的长度不为人知呢? 你能解决这个问题,而不使用额外的空间?
- 使用spymemcached spring整合的时候遇到的一个配置问题
- 使用jQuery Ajax功能的时候需要注意的一个问题
- HTML DOM insertBefore() 方法 使用的时候发现一个问题,记录下
- 使用jQuery Ajax功能的时候需要注意的一个问题
- 使用session时候,遇到的一个问题(请求解决方法)
- 使用jQuery Ajax功能的时候需要注意的一个问题