nginx 子路径 网站图片或js/css 路径缺失 替换
nginx 子路径 网站图片或js/css 路径缺失 替换
location /test { rewrite ^/test/(.*)$ /$1 break; proxy_pass http://localhost:8080; sub_filter_types *; sub_filter '/Content/' '/test/Content/';#将Content加上前缀test sub_filter '/Assets/' '/test/Assets/';#将Assets加上前缀test sub_filter_once off; }
location /jp/ { proxy_pass http://127.0.0.1:4447/; # 关键:传递原始信息给 ASP.NET proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Prefix /jp; # 告诉应用它在子目录下 # 处理 ASP.NET 的重定向(如登录跳转、ReturnUrl) proxy_redirect / /jp/; # 2. sub_filter 修正 HTML 内容中的绝对路径 sub_filter_types *; sub_filter_once off; # 替换常见的根路径引用(注意顺序,避免冲突) sub_filter 'href="/' 'href="/jp/'; sub_filter 'src="/' 'src="/jp/'; sub_filter 'url(/' 'url(/jp/'; sub_filter '/Content/' '/jp/Content/'; sub_filter '/Assets/' '/jp/Assets/'; # 3. 如果 ASP.NET 返回了压缩内容,需要先解压再过滤 proxy_set_header Accept-Encoding ""; }
window.__appBase = '@System.Configuration.ConfigurationManager.AppSettings["AppBasePath"]' || ''; jQuery(document).ready(function () { // initiate layout and plugins App.init(); }); (function(base) { if (!base) return; // 根目录部署时直接跳过 function fixUrl(url) { if (typeof url !== 'string') return url; if (/^https?:\/\//i.test(url) || url.indexOf('//') === 0) return url; // 完整URL if (url.charAt(0) !== '/') return url; // 相对路径 if (url.indexOf(base) === 0) return url; // 已有前缀 return base + url; } // ========== 1. 拦截 jQuery AJAX(覆盖 easyui/datagrid/treegrid 等所有组件)========== if (window.jQuery) { jQuery.ajaxPrefilter(function(options) { if (options.url) { options.url = fixUrl(options.url); } }); // 同时拦截 $.fn.attr 的 href/src/action(处理面包屑、链接、表单等) var originalAttr = jQuery.fn.attr; jQuery.fn.attr = function(name, value) { if (arguments.length > 1 && typeof value === 'string' && (name === 'href' || name === 'src' || name === 'action')) { arguments[1] = fixUrl(value); } return originalAttr.apply(this, arguments); }; // 页面加载完成后,修正已有的静态元素 jQuery(function($) { $('a[href^="/"], img[src^="/"], link[href^="/"], script[src^="/"], form[action^="/"]').each(function() { var $el = $(this); if ($el.is('a')) $el.attr('href', fixUrl($el.attr('href'))); else if ($el.is('img, script')) $el.attr('src', fixUrl($el.attr('src'))); else if ($el.is('link')) $el.attr('href', fixUrl($el.attr('href'))); else if ($el.is('form')) $el.attr('action', fixUrl($el.attr('action'))); }); }); } // ========== 2. 拦截原生 XMLHttpRequest(兜底,防止组件绕过 jQuery)========== if (window.XMLHttpRequest) { var originalOpen = XMLHttpRequest.prototype.open; XMLHttpRequest.prototype.open = function(method, url) { // 注意:arguments 是类数组,不能直接修改,需要重新调用 var args = Array.prototype.slice.call(arguments); args[1] = fixUrl(url); return originalOpen.apply(this, args); }; } // ========== 3. 拦截 fetch API(现代浏览器,部分新组件可能用)========== if (window.fetch) { var originalFetch = window.fetch; window.fetch = function(input, init) { if (typeof input === 'string') { input = fixUrl(input); } else if (input instanceof Request) { var newUrl = fixUrl(input.url); if (newUrl !== input.url) { input = new Request(newUrl, input); } } return originalFetch.call(this, input, init); }; } // ========== 4. MutationObserver 监听 JS 动态插入的 DOM(面包屑等)========== if (window.MutationObserver && window.jQuery) { jQuery(function($) { var observer = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { $(mutation.addedNodes) .find('a[href^="/"], img[src^="/"], link[href^="/"], script[src^="/"]') .addBack('a[href^="/"], img[src^="/"], link[href^="/"], script[src^="/"]') .each(function() { var $el = $(this); var val = $el.is('a') ? $el.attr('href') : $el.attr('src'); if (val && val.charAt(0) === '/' && val.indexOf(base) !== 0) { $el.is('a') ? $el.attr('href', base + val) : $el.attr('src', base + val); } }); }); }); if (document.body) { observer.observe(document.body, { childList: true, subtree: true }); } }); } })(window.__appBase);
<!-- 子目录部署时:value="/jp" --> <!-- 根目录部署时:value="" --> <add key="AppBasePath" value="/jp" />

浙公网安备 33010602011771号