【问题标题】:IIS 7 rewrite rule and Url.Content issuesIIS 7 重写规则和 Url.Content 问题
【发布时间】:2012-05-15 23:22:13
【问题描述】:

我在 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);

有人知道为什么会这样吗?我有点困惑为什么会发生这种情况以及如何在我的应用程序中解释它?

【问题讨论】:

  • 您能否提供更多关于您的项目和 IIS 在文件夹结构方面的设置的信息?
  • 是在网站根目录下运行的,不是在虚拟目录下运行的,还有什么需要知道的?

标签: asp.net-mvc iis-7 url-rewrite-module umbraco5


【解决方案1】:

好的,一旦我意识到我永远无法针对 ASP.Net MVC 使用 IIS Rewrite,我决定改用 HttpContext.RewritePath,现在一切似乎都正常工作了。

这是一个非常基本的问题,因为受影响的不仅仅是 Url.Content,还有控制器路由,我在这个特定页面上有一个表单也错误地指向 /store/ 而不是 /。

【讨论】:

  • 这有帮助,但我也发现简单地删除波浪号 (~) 对我有用。它不应该那样工作,但它解决了问题。
  • @Jacques 只要它是根网站,就可以删除波浪号。如果您在网站内运行应用程序,则需要该波浪号,否则它会转到不正确的根网站。
【解决方案2】:

如果您的站点当前是并且将永远是域/子域的根目录(例如,您总是打算将 ~/ 表示为 site.com/)然后丢失 ~ 并让所有网址都为 @ 987654324@。 ~ 做了一些古怪的巫毒术——正如你所见。

【讨论】:

  • 它不仅会影响我的内容,还会影响 Html.BeginForm 导致路径不正确!
【解决方案3】:

Scripts.Url 确实有助于保持您的应用根目录

【讨论】:

  • 欢迎来到 SO!我们感谢您对帮助他人的兴趣。如果您可以为提问者的问题提供解决方案,请使用“回答”功能。对于一般性建议,您可以使用“评论”功能。
猜你喜欢
  • 2014-05-01
  • 2014-08-22
  • 1970-01-01
  • 2017-02-15
  • 1970-01-01
  • 2014-01-05
  • 2012-07-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多