繁体   English   中英

MVC捆绑包和IIS虚拟目录(URL重写)

[英]MVC bundles and IIS virtual directories (URL rewrite)

我在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重写的原因。

你说 :

我在IIS服务器虚拟目录上托管了多个应用程序,并且使用URL重写来简化它们

因此,问题是指根配置(虚拟目录)可用于捆绑等。这与捆绑配置或重写规则无关。 我认为您需要将myapplication目录设置为虚拟目录并将其设置为单独的网站。 确保您已遵循“ 创建网站”中提供的说明,其中指出:

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

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

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

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

为网站配置主机头(IIS 7)指向第一个。

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

Update2 :最后,我建议您关注如何在winhost.com上发布或托管子域? 解决这样一个惊人的问题:)

我有两种选择可以尝试。

1)尝试使用此技巧诱使它使用正确的路径:

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

您可能会收到HttpException (不能使用前导..退出顶层目录。),但是值得一试。 我无法复制您的环境,因此无法测试。

2)创建自己的虚拟路径提供程序: 更改ASP.net应用程序的根目录?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM