[英]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文件中创建一个网站条目。 该条目指定:
- 网站的网络绑定
- 将站点映射到文件系统中的位置
- (可选)指定用于访问内容的用户凭据
为确保用户请求到达正确的网站,您必须为服务器上的每个网站配置唯一标识。可以使用以下唯一标识符来区分托管在同一服务器上的网站。
为网站配置主机头(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.