2015-09-06 89 views
7

相对图像路径转换为绝对路径相对CSS图像有许多问题要问和回答#像这样的:MVC捆绑,当网站被部署到一个应用程序

MVC4 StyleBundle not resolving images

是建议增加new CssRewriteUrlTransform()如下:

bundles.Add(new StyleBundle("~/Content/css/jquery-ui/bundle") 
     .Include("~/Content/css/jquery-ui/*.css", new CssRewriteUrlTransform())); 

这实际上救了我之前。但现在,我部署我的网站的应用程序(而不是网站的根),还有一个问题:

的应用程序是:

http://localhost/sample/ 

但图像的URL是这样的:

http://localhost/css/imgs/spirit.png 

而应该是:

http://localhost/sample/css/imgs/spirit.png 

虽然捆绑的CSS链接本身是正确的,工作。

+0

是对将试样在IIS虚拟目录? –

+0

它是IIS中的应用程序和虚拟目录。在这个示例中,应用程序名称是**示例** –

+0

请参阅http://stackoverflow.com/questions/19765238/cssrewriteurltransform-with-or-without-virtual-directory,它完全描述*发生了什么*和*您需要什么去做*。 –

回答

4

如果有涉及到下面的代码会做没有虚拟目录:

bundles.Add(new StyleBundle("~/bundles/css").Include(
       "~/Content/css/*.css", new CssRewriteUrlTransform())); 

,但是当使用VirtualDirectory CssRewriteUrlTransform将改写到主机,而不是主机/ VirtualDirectory。解决的办法是获得CssRewriteUrlTransform这是完全这里讨论:ASP.NET MVC4 Bundling with Twitter Bootstrap

public class CssRewriteUrlTransformWrapper : IItemTransform 
{ 
    public string Process(string includedVirtualPath, string input) 
    {   
     return new CssRewriteUrlTransform().Process("~" + VirtualPathUtility.ToAbsolute(includedVirtualPath), input);   
    } 
} 
1

这其实只是一般,当应用程序正在运行的虚拟目录不 正常工作优化的另一个问题。

由于您使用的是虚拟目录托管你的网站,那么你应该做的包装,将调用CssRewriteUrlTransform与固定路径:

public class CssRewriteUrlTransformWrapper : IItemTransform 
{ 
     public string Process(string includedVirtualPath, string input) 
     {   
      return new CssRewriteUrlTransform().Process("~" + VirtualPathUtility.ToAbsolute(includedVirtualPath), input);   
     } 
} 

More info