我在IIS 7中有以下规则:
<rule name="Category" enabled="true">
<match url="^store/([0-9]+)/(.*)" />
<action type="Rewrite" url="store?cid={R:1}" appendQueryString="false" logRewrittenUrl="true" />
</rule>
这似乎工作正常,但在我的ASP.Net MVC 3应用程序中,我有几个@ Url.Content(“〜/”)条目,它们正在解析为/ store /作为根而不是/。例如,典型的网址为http://mysite.com/store/99/coats-with-hoods。
编辑/更新:我仍然在这个上拉头发,所以我决定查看Url.Content代码库,我注意到它检查URL是否已被重写(true),如果所以它使路径相关,反过来不给我绝对URL:
if (!PathHelpers._urlRewriterHelper.WasRequestRewritten(httpContext))
return contentPath;
string relativePath = PathHelpers.MakeRelative(httpContext.Request.Path, contentPath);
return PathHelpers.MakeAbsolute(httpContext.Request.RawUrl, relativePath);
任何人都知道为什么会这样?我有点困惑为什么会发生这种情况以及如何在我的应用程序中解释它?
答案 0 :(得分:2)
好的,一旦我意识到我永远无法对ASP.Net MVC使用IIS Rewrite,我决定改用HttpContext.RewritePath,现在看来它们都应该正常工作。
这是一个非常基本的问题,因为它不仅受到影响的Url.Content,它也是控制器路由,我在这个特定页面上有一个表单也错误地指向/ store /而不是/。 / p>
答案 1 :(得分:1)
如果您的网站目前并且始终是域/子域的根(例如,您总是打算~/
表示site.com/
),那么就会丢失~
将所有网址设为/path/to/content
。 ~
做了一些古怪的伏都教 - 正如你所见。
答案 2 :(得分:-1)
Scripts.Url确实有助于保持应用程序的根目录