我在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 /作为根目录,而不是/。典型的URL例如是http://mysite.com/store/99/coats-with-hoods。
编辑/更新:我仍然在努力学习,所以我决定研究Url.Content代码库,我注意到它检查URL是否已被重写(true),如果是,它使路径相关,而not却给了我绝对URL:
if (!PathHelpers._urlRewriterHelper.WasRequestRewritten(httpContext))
return contentPath;
string relativePath = PathHelpers.MakeRelative(httpContext.Request.Path, contentPath);
return PathHelpers.MakeAbsolute(httpContext.Request.RawUrl, relativePath);
任何人都知道为什么会这样吗?我对为什么会发生这种情况以及如何在应用程序中进行解释感到困惑?
好吧,当我意识到我永远无法对ASP.Net MVC使用IIS Rewrite时,我决定改用HttpContext.RewritePath,现在所有功能似乎都可以正常工作。
这是一个非常基本的问题,因为它不仅受Url.Content的影响,也受控制器路由的影响,我在此特定页面上有一个表单,该表单也错误地指向/ store /而不是/。
[如果您的站点当前并且将始终是域/子域的根(例如,您始终打算将~/
表示为site.com/
),则丢失~
,只需将所有网址设为[C0 ]。 /path/to/content
做了一些古怪的伏都教教具-如您所见。
Scripts.Url确实有助于使您的应用程序保持根目录不变