伪地址其他注意事项

  前面谈到伪地址,为了目录化网站地址,可以生成更加容易被记住和被搜索引擎抓取的地址,而不是将aspx之类后缀的网址直接展示给用户。

  但是在实际项目中,也遇到了以下问题,现在分享一下:

一 关于匹配.html后缀网址的IIS配置

  URL匹配正则表达式:  ^http://网址/list_([1-9])(_([1-3]))?/(p(\\d+)\\.htm)?

输入以下地址:

  http://网址/list_1_2/          //匹配成功,默认跳转到第一页

  http://网址/list_1_2/p2         //匹配成功,默认跳转到第一页   (注意最后(p(\\d+)\\.htm)?是可有可无的,当没有是赋值默认值)

  http://网址/list_1_2/p1.htm    //匹配成功

  http://网址/list_1_2/p1.ht   //提示“无法找到该页”

  http://网址/list_1         //未匹配成功,所以跳转到制定的错误页面

网址要能匹配后缀为.html和.htm的地址,还需要配置IIS,因为默认是不识别.html后缀的网址的。配置如下:

  

 然后:

  

  

即添加.html,可执行文件从其他应用程序拓展赋值。特别注意,不要勾选确认文件是否存在,因为服务器上不存在这个文件。

 

二 处理 http://网址/list_1_2/p1.ht  这类的地址提示“无法找到该页”的问题

  

  http://网址/list_1_2/p1.ht  这类的地址提示“无法找到该页”,是IIS的设置用户体验很不好,因为没有设置.ht之类后缀的应用程序扩展名,但是这张情况很多,不可能把每种情况都枚举添加。

  这类问题可以这样处理:

  

  在通配符应用程序映射(执行顺序)中插入framework项,注意也不要勾选确认文件是否存在。

  这样输入http://网址/list_1_2/p1.ht 这类的网址就不会出现上面无法找到页面的情况,匹配成功就会跳转到相应页面。

  但是这样处理后会发现一个问题,就是页面上的图片、css、js之类的资源文件无法找到或显示,导致页面错乱。这是因为上面操作(在通配符应用程序映射(执行顺序)中插入framework项)导致无法找到资源文件路径;

  可以有以下处理方法:

  在之前伪地址改进一文中的UrlReWrite类中,加入以下代码:

  

//当为资源文件时,不重写,直接跳过
if (re.IndexOf(".html") > -1 || re.IndexOf(".htm") > -1 ||
                (re.IndexOf(".js") < 0 && re.IndexOf(".css") < 0 && re.IndexOf(".jpg") < 0 && re.IndexOf(".jpeg") < 0
                 && re.IndexOf(".png") < 0 && re.IndexOf(".gif") < 0 && re.IndexOf(".swf") < 0 && re.IndexOf(".bmp") < 0
                  && re.IndexOf(".aspx") < 0 && re.IndexOf(".asax") < 0 && re.IndexOf(".ashx") < 0
                  && re.IndexOf(".asp") < 0 && re.IndexOf(".asmx") < 0 && re.IndexOf(".config") < 0
                  && re.IndexOf(".sitemap") < 0))

 

 

具体位置如下: 

if (re.IndexOf(".html") > -1 || re.IndexOf(".htm") > -1 ||
                (re.IndexOf(".js") < 0 && re.IndexOf(".css") < 0 && re.IndexOf(".jpg") < 0 && re.IndexOf(".jpeg") < 0
                 && re.IndexOf(".png") < 0 && re.IndexOf(".gif") < 0 && re.IndexOf(".swf") < 0 && re.IndexOf(".bmp") < 0
                  && re.IndexOf(".aspx") < 0 && re.IndexOf(".asax") < 0 && re.IndexOf(".ashx") < 0
                  && re.IndexOf(".asp") < 0 && re.IndexOf(".asmx") < 0 && re.IndexOf(".config") < 0
                  && re.IndexOf(".sitemap") < 0))
        {
            bool bMark = ResolveUrl(strRequestPath, ref strNewUrl);
            if (bMark)
            {
                if (!string.IsNullOrEmpty(strNewUrl))
                {
                    context.RewritePath(strNewUrl);
                }
            }
            else
            {
                context.Response.Redirect(strNewUrl);
            }
        }

 

此外,还可以这样处理,重新写正则表达式,将此类视为不匹配,跳转到指定页面地址,通过观察,京东应该用的就是这个方法,只要页面地址错误都会跳转到京东首页。

转载于:https://www.cnblogs.com/wxh19860528/archive/2013/01/18/2866681.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值