가상 디렉터리입니다 크세루리트우를트란스포르마 없이

Mvc 에서 번들링은 lionbridge 사이트를 통해 확인합니다 크세루리트우를트란스포르마 ',' 우리가 사용하는 이미지 url 에서 작동합니까 동적임 번들에는 css 파일.

하지만 이 가상 디렉터리인 이리에 때만 사용하지 않을 때

'하지만' 에서 'http://localhost/ http://localhost/VirttualDir' 작동하지 않습니다. 이 때문에 '는' 크세루리트우를트란스포르마 트란포름 언약보다는 시행하십시오 고려하여 가상 폴더에서는 또 uirl. 만일 한 것으로 보인다 '는' 진짜 '이미지' 는 잘못된 경로를 localhost/vdir/content/img/foo.png 재작성할 redhat. localhost/content/img/foo.png

해결책

'Here i am not 문제가 완전히 이해할 수 있지만, 반드시 보고' http://localhost 잘못된 것 같다. 대한 url 을 사용하여 번들에는 절대 안 됩니다.

여기에 내가 어떻게 작동됨 가져다줄래요 크세루리트우를트란스포르마 완벽하게 사용할 수 있다.

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

&quot Bundles"; 가상 플레이어임.

이를 통해?

업데이트

I was 를 혼동하는 &quot VirtualDir"; iis 버추두리 얘기를 할 때, 그리고 제 생각에 번들에는 버추두리! # 39 의 it& 사실이 아닌 것으로 이 경우 크세루리트우를트란스포르마 재작성할 url 을 호스트에서는 호스트에서는 / 버추두리 uri 입니다.

이를 위해 할 수 있도록 크세루리트우를트란스포르마 파생합니다 do what you need it. 좋은 토론 여기 있습니다. [https://stackoverflow.com/questions/12577108/asp-net-mvc4-bundling-with-twitter-bootstrap? rq = 1] [1]

가장 좋은 답이 있을 것 같다. http://aspnetoptimization.codeplex.com/workitem/83

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

대신 이 클래스를 사용하여 크세루리트우를트란스포르마

[1]: https://stackoverflow.com/questions/12577108/asp-net-mvc4-bundling-with-twitter-bootstrap? rq = 1

해설 (3)

난 이미 동일한 문제가 발생합니다. This is how I 고정식입니다 있다.

private class ProperUrlRewrite : IItemTransform
{
    private static string RebaseUrlToAbsolute(string baseUrl, string url)
    {
        if (string.IsNullOrWhiteSpace(url) || string.IsNullOrWhiteSpace(baseUrl) || url.StartsWith("/", StringComparison.OrdinalIgnoreCase) || url.Contains(':'))
            return url;
        return VirtualPathUtility.Combine(baseUrl, url);
    }
    private static Regex UrlPattern = new Regex("url\\s*\\(['\"]?(?[^)]+?)['\"]?\\)");
    public string Process(string includedVirtualPath, string input)
    {
        if (includedVirtualPath == null)
            throw new ArgumentNullException("includedVirtualPath");
        if (string.IsNullOrWhiteSpace(input))
            return input;

        string directory = VirtualPathUtility.GetDirectory(VirtualPathUtility.ToAbsolute(includedVirtualPath));
        if (!directory.EndsWith("/", StringComparison.OrdinalIgnoreCase))
            directory += "/";
        return UrlPattern.Replace(input, match => "url(" + ProperUrlRewrite.RebaseUrlToAbsolute(directory, match.Groups["url"].Value) + ")");
    }
}

39 의 완벽한 그러니까말이야 it& 멀리 떨어져 있는 경우가 많고 많은 모서리까지 이 문제가 발생할 수 (I& # 39, m 잘 모르겠음 파싱할 수 있습니다 CSS 파일이 있는 regex 제일 표시되어도 이는 기존 '-' 는 정확히 크세루리트우를트란스포르마) 이지만, 지금까지 이 있다.

해설 (1)

39, & # 39 는 CssRewriteUrlTransform&. # 39, T 실행하십시오 DOESN& 작동됩니다 응용 프로그램용으로 위에 가상 디렉터리입니다.

그래서 그냥 그랬다고 실행될 경우, http://your-site.com/, http://your-site.com/your-app/ you& app 실행됩니 신앙이니라 실행됩니 # 39, & # 39, 이미지, ll %s/dbase/ext_table. 404 모두 충족하는 때문에 기본값입니다 CssFixRewriteUrlTransform& # 39. / # 39, & # 39 는 함께, 기존 이미지 참조.

이:

public class CssFixRewriteUrlTransform: IItemTransform {

    private static string ConvertUrlsToAbsolute(string baseUrl, string content) {
        if (string.IsNullOrWhiteSpace(content)) {
            return content;
        }
        var regex = new Regex("url\\(['\"]?(?[^)]+?)['\"]?\\)");
        return regex.Replace(content, match = > string.Concat("url(", RebaseUrlToAbsolute(baseUrl, match.Groups["url"].Value), ")"));
    }

    public string Process(string includedVirtualPath, string input) {
        if (includedVirtualPath == null) {
            throw new ArgumentNullException("includedVirtualPath");
        }
        var directory = VirtualPathUtility.GetDirectory(includedVirtualPath);
        return ConvertUrlsToAbsolute(directory, input);
    }

    private static string RebaseUrlToAbsolute(string baseUrl, string url) {
        if (string.IsNullOrWhiteSpace(url) || string.IsNullOrWhiteSpace(baseUrl) || url.StartsWith("/", StringComparison.OrdinalIgnoreCase)) {
            return url;
        }
        if (!baseUrl.EndsWith("/", StringComparison.OrdinalIgnoreCase)) {
            baseUrl = string.Concat(baseUrl, "/");
        }
        return VirtualPathUtility.ToAbsolute(string.Concat(baseUrl, url));
    }
}

참고: 만약 모든 파일 삭제, css, t, t # 39 와 지미 이크스 don& # 39 이 doesn& 수리입니다.

해설 (2)

나는 문제가 포함된 url 을 data&quot "; 그래서 저는 다시 하다, regex 는 심지어 uirl 내부 다른 이것이 나의 해결책:

public string Process(string includedVirtualPath, string input)
    {
        if (includedVirtualPath == null)
        {
            throw new ArgumentNullException(nameof(includedVirtualPath));
        }

        if (string.IsNullOrWhiteSpace(input))
        {
            return input;
        }

        var directory = VirtualPathUtility.GetDirectory(includedVirtualPath);
        if (!directory.EndsWith("/", StringComparison.OrdinalIgnoreCase))
        {
            directory += "/";
        }

        return new Regex(@"url\s*\(\s*([\'""]?)(?(?:(?:data:)|(?:https?:))?)(?(\\\1|.)*?)\1\s*\)")
            .Replace(input, match => string.Concat(
                "url(",
                match.Groups[1].Value,
                match.Groups["scheme"].Value,
                match.Groups["scheme"].Value == "" ?
                    RebaseUrlToAbsolute(directory, match.Groups["url"].Value) :
                    match.Groups["url"].Value,
                match.Groups[1].Value,
                ")"
            ));
    }

    private static string RebaseUrlToAbsolute(string baseUrl, string url)
    {
        if (string.IsNullOrWhiteSpace(url) || string.IsNullOrWhiteSpace(baseUrl)
            || url.StartsWith("/", StringComparison.OrdinalIgnoreCase))
        {
            return url;
        }

        return VirtualPathUtility.ToAbsolute(string.Concat(baseUrl, url));
    }
}

34198968 https://stackoverflow.com/questions/171480/regex-grabbing-values-between-quotation-marks/34198968 기준으로

해설 (0)