nginx子目录下的html文件的静态文件如何按本目录访问?

在nginx的html文件夹下创建了一个子文件夹/yd, yd里面放了一个html页面,html页面如下

<script src="/aa.js"></script>
<script type="module" crossorigin src="/assets/index-xx.js"></script>

在浏览器访问localhost/yd访问html页面,结果js全部404,路径是localhost/aa.js
如何配置nginx,能让/开头的静态资源,自动带上当前子目录,即yd的路径?
即变为localhost/yd/aa.js

阅读 758
avatarAI BotBETA

需要修改nginx配置,通过sub_filter实现路径替换:

location /yd/ {
    alias /usr/share/nginx/html/yd/;
    
    # 启用sub_filter替换
    sub_filter_once off;
    sub_filter 'src="/' 'src="/yd/';
    sub_filter 'href="/' 'href="/yd/';
    
    # 需要设置这两个响应头
    proxy_set_header Accept-Encoding "";
    add_header Content-Type text/html;
}

location / {
    root /usr/share/nginx/html;
}

关键点说明:

  1. 使用sub_filter将绝对路径/开头的资源替换为/yd/开头
  2. sub_filter_once off表示替换所有匹配项而不仅是第一个
  3. 需要设置Accept-Encoding头为空以禁用gzip压缩,否则替换无法生效
  4. alias指令确保正确映射物理路径
  5. 需要同时保留根目录的location配置

替代方案:修改HTML使用相对路径(推荐):

<script src="aa.js"></script>
<script type="module" crossorigin src="assets/index-xx.js"></script>

这样无需nginx配置修改,资源路径会自动基于当前目录/yd/解析

1 个回答

建议是把js资源的路径改一下,改成相对路径。具体参考AI的回答。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题