jQuery加载通用HTML页头页脚时的重定向链问题解决咨询
看起来你遇到的问题是服务器端的重定向规则导致的——当请求header.html时,服务器会自动重定向到不带.html后缀的header路径,这就产生了检测工具指出的重定向链。以下是几种可行的解决方案:
方案1:修改jQuery请求路径,直接指向重定向后的目标
既然服务器已经把header.html重定向到header,那我们可以跳过中间的重定向步骤,直接让jQuery加载不带后缀的路径:
$(function(){ $("#header").load("header"); $("#footer").load("footer"); });
这样浏览器会直接请求https://www.website.co/header,不再触发header.html到header的重定向,自然消除了重定向链。需要确认的是,服务器能正确处理不带.html的请求,返回对应的页头内容(这一点从现有的重定向行为来看应该是已经配置好的)。
方案2:调整服务器配置,排除特定文件的重定向
如果不想修改前端代码,可以在服务器的重写规则里添加例外,让header.html和footer.html不被重定向。举两个常见服务器的配置例子:
Apache(.htaccess文件)
如果你的重写规则是用来移除所有.html后缀的,添加一个条件排除这两个文件:
RewriteEngine On # 排除header.html和footer.html的重定向 RewriteCond %{REQUEST_URI} !^/(header|footer)\.html$ # 其他重写规则 RewriteRule ^([^\.]+)$ $1.html [NC,L]
Nginx
在对应的server块里,调整rewrite规则,跳过这两个文件:
server { # ...其他配置 location / { if ($request_uri !~* ^/(header|footer)\.html$) { rewrite ^/([^\.]+)$ /$1.html last; } } }
修改后,请求header.html会直接返回文件内容,不再触发重定向。
方案3:改用服务器端包含(SSI)或后端嵌入
从性能角度来说,客户端用jQuery加载其实会多一次HTTP请求(就算没有重定向),更好的方式是在服务器端直接把页头页脚嵌入到页面中:
- 如果你用PHP:直接在页面中写
<?php include('header.html'); ?>代替jQuery的加载逻辑 - 如果你用Apache的SSI:开启SSI后,在页面中添加
<!--#include virtual="header.html" -->
这种方式不会产生额外的客户端请求,彻底避免重定向和性能损耗。
内容的提问来源于stack exchange,提问作者Paul Towers
相关产品推荐
相关产品推荐

