'CssRewriteUrlTransform'은 가상 디렉터리에서 실행되지 않는 응용 프로그램에 적합합니다.
앱이 http://your-site.com/에서 실행되는 경우 정상적으로 실행되지만 http://your-site.com/your-app/에서 실행되면 기본 'CssFixRewriteUrlTransform'이 (가) 이미지를 '/'로 참조하기 때문에 모든 이미지에 404가 표시됩니다.
이 문제를 해결하려면, 나는이 같은 'CssRewriteUrlTransform'내 자신의 버전을 구현 한 :
public class CssFixRewriteUrlTransform : IItemTransform {
private static string ConvertUrlsToAbsolute(string baseUrl, string content) {
if (string.IsNullOrWhiteSpace(content)) {
return content;
}
var regex = new Regex("url\\(['\"]?(?<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));
}
}
UPDATE :
public class CssRewriteUrlTransformWrapper : IItemTransform
{
public string Process(string includedVirtualPath, string input)
{
return new CssRewriteUrlTransform().Process("~" + VirtualPathUtility.ToAbsolute(includedVirtualPath), input);
}
}
: 그 밖에 다른 해결책이었다 지적 superjos 덕분에
우수한, 훌륭한 근무, 감사합니다! – Pelle
hao-kung, 이것은'font-face' 규칙을 가지고 저에게 적합하지 않습니다. 그럴까요? – flipdoubt
@flipdoubt 작동하지 않는 것을 가지고 예제/repro를 게시 할 수 있습니까? –