【问题标题】:MVC bundles and IIS virtual directories (URL rewrite)MVC 包和 IIS 虚拟目录(URL 重写)
【发布时间】:2015-09-25 17:55:35
【问题描述】:

我在 IIS 服务器虚拟目录上托管多个应用程序,并且我正在使用 URL 重写来简化它们。像 "~/path/to/my/content" 这样手动编写的所有图像和其他资产都有正确的输出 "/path/to/my/content",但像 "~/client/js" 这样的捆绑路径给出的输出 "/myapplication/client/js" 应该是 "/client/js"

我该如何解决这个问题?

我如何启动脚本包:

var scriptBundle = new ScriptBundle("~/client/js");

重写配置:

<rule name="Official Website" stopProcessing="true">
               <match url="(.*)" />
               <conditions>
                  <add input="{HTTP_HOST}" matchType="Pattern" pattern="^(www\.)?domain\.com$" ignoreCase="true" negate="false" />
               </conditions>
               <action type="Rewrite" url="officialsite/{R:1}" />
            </rule>

正在研究这些主题,但无法为我做任何事情:

更新:我使用 Winhost 作为主机提供商,他们不支持为 IP 设置主机头,可能是由于共享 IP。它们提供指向根文件夹的域指针,这就是我使用 URL 重写的原因。

【问题讨论】:

  • 您告诉我们您正在重写,但您决定不显示您的重写规则?看起来他们可能是问题的一部分。
  • 在我看来,您想使用多个链接到端口 80 并通过主机名进行区分的网站。您不需要为此使用 URL 重写。 this 能成为你所追求的吗?
  • @milanio 嗨,我使用 winhost 作为我的托管服务提供商,我唯一能做的就是将域指针设置为适当的根文件夹。他们不提供像您提供的链接那样设置主机标头。谢谢你。

标签: asp.net-mvc url-rewriting iis-7 bundling-and-minification virtual-directory


【解决方案1】:

我有两个选项你可以试试。

1) 尝试使用它来欺骗它使用正确的路径:

var scriptBundle = new ScriptBundle("~/../client/js");

你可能会得到一个HttpException(不能使用前导..退出上面 顶级目录。),但值得一试。我无法复制你的 环境,所以我无法测试。

2) 创建您自己的虚拟路径提供程序: Changing ASP.net application root?

【讨论】:

  • 我尝试了您的第一个建议,不幸的是它最终以错误告终。关于第二个建议,我并没有真正掌握VirtualPathprovider 的概念,并且使用提供的示例我无法检索文件。
【解决方案2】:

你说:

我在 IIS 服务器虚拟目录上托管多个应用程序 我正在使用 URL Rewrite 来方便他们

所以,问题是指根配置(虚拟目录)可用于捆绑等,而不是捆绑配置或重写规则。我认为您需要将 myapplication 目录设置为虚拟并将其设置为单独的网站。确保您已按照Create Web Site 中的说明进行操作,其中显示:

您在 IIS 中添加一个网站,在 ApplicationHost.config 文件。该条目指定:

  1. 网站的网络绑定
  2. 将站点映射到文件系统中的某个位置
  3. (可选)指定用于内容访问的用户凭据

为确保用户请求到达正确的网站,您必须为服务器上的每个站点配置唯一标识。托管在同一服务器上的网站可以使用以下唯一标识符进行区分。

  • 主机头名称(推荐
  • IP 地址
  • TCP 端口号

Configure a Host Header for a Web Site (IIS 7) 指向第一个。

更新:我认为服务器和您的项目可能存在名称冲突。更明亮地尝试将~/client/js 中的 client 及其文件夹更改为新文件夹。除非有多个路径选择(具有此路径深度)供服务器获取,否则您可以通过在项目和 js 包映射中添加 \ 来增加额外深度来解决它。

Update2:最后我建议您关注How to publish or host subdomain on winhost.com? 提供的完整文章来解决这个惊人的问题:)

【讨论】:

  • 感谢您的回答。我按照这些说明 (goo.gl/MGceH5) 关于如何创建这些虚拟目录,我能够设置两个具有不同子域的不同站点,并且两个站点上的所有内容都可以正常工作,除了捆绑方面(甚至 html 相对路径 ~/Content 解析为 @ 987654328@ 不是/myapplication/Content,这是我需要的)。例如,如果我从 '/myapplications/client/js?v=123123` 中取出 /myapplication,它会为我获取正确的捆绑 js 文件。 ApplicationHost配置文件,我无权访问,也无法设置IIS绑定。
  • 我拥有的文件夹结构是Content/client/js,但解决的捆绑路径是client/js,它从未发生冲突。需要指出的是,捆绑不仅仅在这种虚拟目录场景中起作用。
  • @skmasq 默认使用myapplication 而不是content
  • @skmasq 我的最后一次帮助将是我帖子中的第二次更新。祝我的朋友好运。
猜你喜欢
  • 1970-01-01
  • 2016-04-15
  • 1970-01-01
  • 2015-02-06
  • 1970-01-01
  • 2011-02-12
  • 1970-01-01
  • 2017-05-08
  • 1970-01-01
相关资源
最近更新 更多