首页 新闻 会员 周边

IIS8集成模式下,使用urlRewrite报:无法使用前导 .. 在顶级目录上退出。

0
悬赏园豆:20 [已关闭问题] 关闭于 2016-10-20 17:34

可以非常确定的是项目里面绝对没有../这种路径。

 

而且报错的页面非常极品,报错的行指在一个对象输出上,代码类似这样:

<h2>@Module.name</h2>

在读一个对象的属性的时候,竟然会报出"无法使用前导 .. 在顶级目录上退出。 ",而且即使删了这条语句别的地方也会报。

 

查了各种资料,都说是../这种路径的问题,我检查了包括数据,都没有../这种。

 

环境:.net framework 4.5 / .net mvc 4 / iis8集成模式:

urlrewrite的内容是:

        <rule name="foo" stopProcessing="true">
          <match url="blog/([^./]+).html?" />
          <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
          <action type="Rewrite" url="/blog/context/{R:1}" logRewrittenUrl="true" />
        </rule>

 

并且,如果我正常访问/blog/context?id=xxxx的时候,是完全没有问题的。

问题补充:

后来我在web.config里,让所有的请求交给应用程序处理,并且删掉urlrewrite的规则,在routerConfig.cs里写上路由规则,就好了

web.config:

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
  </system.webServer>

 

urlrewrite,把转发规则注释掉:

<!--   <rule name="foo" stopProcessing="true">
          <match url="^blog/([^./]+?)\.html" />
          <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
          <action type="Rewrite" url="/blog/context/{R:1}" logRewrittenUrl="true" />
        </rule>
        -->

程序里RouteConfig.cs是这样写的:

  routes.MapRoute(
      name: "blogcontext",
      url: "blog/{id}.html",//参见
      defaults: new { controller = "Blog", action = "Article", id = UrlParameter.Optional },
      namespaces: new string[] { "Blog.Controllers" }
  );

 

简单来说是把请求拦截下来交给应用程序处理了,大概估到是urlRewrite重写后导致的问题。

但是对这个问题仍然不明白,并且不太满意这个方案。

linkFly的主页 linkFly | 初学一级 | 园豆:91
提问于:2016-09-06 05:38
< >
分享
所有回答(2)
0

题主可以先检查一下模版页中的代码。

蝌蝌 | 园豆:158 (初学一级) | 2016-09-06 08:30

 可以非常非常非常确定模板页中代码没有问题

支持(0) 反对(0) linkFly | 园豆:91 (初学一级) | 2016-09-06 18:56
0

blog/([^./]+).html?改为^blog/([^./]+?)\.html试试

dudu | 园豆:30994 (高人七级) | 2016-09-06 09:27

 改了之后还是会报同样的错

支持(0) 反对(0) linkFly | 园豆:91 (初学一级) | 2016-09-06 19:04

 村长,看下我补充的内容

支持(0) 反对(0) linkFly | 园豆:91 (初学一级) | 2016-09-06 19:18

@linkFly: 视图中有没有“../”这样的路径?

支持(0) 反对(0) dudu | 园豆:30994 (高人七级) | 2016-09-06 21:08

@dudu: 可以非常确定绝对没有"../"这样的路径,我对整个项目搜索过了,出问题的cshtml也查过了。

支持(0) 反对(0) linkFly | 园豆:91 (初学一级) | 2016-09-06 23:29

@linkFly: 建议试试匹配路径与重写路径不使用同样的名称/blog/
另外,这个错误对应的英文错误信息是:

Cannot use a leading .. to exit above the top directory

支持(0) 反对(0) dudu | 园豆:30994 (高人七级) | 2016-09-07 10:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册