MVC3 .net 4.0无扩展URL和isapi_rewrite

时间:2011-12-14 22:48:46

标签: asp.net-mvc-3 .net-4.0 isapi-rewrite

不幸的是,我被迫在我的MVC网站上使用IIS6。 .net 4.0添加了模仿愚蠢黑客的功能,以使无扩展的URL在IIS6中工作。我的网站旨在利用网址重写为搜索引擎优化目的。客户端希望使用的关键字URL指示精心设计的URL重写方案。

微软的功能问题实际上归结为url重写和尝试匹配模式。我已经看到各种规则试图从网址中剥离可怕的eurl.axd,以便模式匹配。我试图使用这些规则

RewriteRule ^(。)/ eurl.axd / [a-f0-9] {32}(。)$ $ 1 $ 2 要么 RewriteRule(。)eurl.axd /. $ 1

哪个有效,但在嵌套重定向时也会引入其他问题。即处理旧网址等等

发生的情况是eurl.axd被剥离,并且在重定向上isapi_filter没有得到导致IIS 404错误的请求。

修补网址,我想出了这个可能的解决方案 RewriteRule ^ generators / generator-parallel-capability /([^ /] )/([^ /] )$ / generators / htmlcontent / generator-parallel-capability / $ 1 / $ 2 [NC,L]

它只是抓取了eurl.axd部分,并将其重写为执行的URL并附加了它。

有更好的方法吗?我有几百个符合这种模式的网址,如果有一条规则可以处理它们,那就太好了。

2 个答案:

答案 0 :(得分:0)

我们在配置之上使用了一个通用规则来剪切/eurl.axd234234

RewriteRule ^(。)/ eurl.axd。 $ $ 1 [NC]

这必须适用于除根之外的所有事情。

答案 1 :(得分:0)

当网址被重写多次时,使用重写规则RewriteRule ^(.)/eurl.axd.$ $1 [NC]会导致一些非常重要的行为。即从旧网址到新虚荣网址,再到实际执行网址。

使用地图,我能够生成一个非常好用的模式,并使.htaccess文件不会混乱。

RewriteCond ${contentmap:$2}  >""  [NC]
RewriteRule ([^/]*)/([^/]*)/([^/]*)/([^/]*)$ /$1/${contentmap:$2}/$2/$3/$4 [NC,L]
RewriteCond ${contentmap:$2}  >""  [NC]
RewriteRule ([^/]*)/([^/]*)$ /$1/${contentmap:$2}/$2 [NC,L]

第一个检测到模式/controller/some-content/eurl.axd/1234并将其重写为/controller/some-controller-action/eurl.axd/1234 第二个做同样的事情就是没有最后的欧元垃圾。这是我的运行iis 7的开发机器

我确信有更好的方法,我当然愿意接受更好的建议。