map $http_user_agent $is_baidu_app { default "no"; ~*baiduboxapp "yes"; }
map $query_string $is_baidu_vid { default "no"; ~*bd_vid= "yes"; }
map "$is_baidu_app:$is_baidu_vid" $http_intercept { default 0; ~*yes 1; }
map $http_intercept $http_path { 0 /www/wwwroot/baidu.com/0; 1 /www/wwwroot/baidu.com/1; }
server root ${http_path};
问题 返回1不显示资源文件找不到,不如css,js都找不到有啥解决办法吗
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据您提供的Nginx配置片段,看起来您正在尝试基于用户代理($http_user_agent
)和查询字符串($query_string
)来判断请求是否来自百度APP,并据此重定向到不同的网站根目录。但是,当返回1时(即访问者符合特定的百度APP条件),您遇到了资源文件(如CSS、JS)找不到的问题。
这个问题通常是因为您的资源文件路径相对于新的网站根目录(/www/wwwroot/baidu.com/1
)没有正确调整导致的。当Nginx服务器更改了root目录后,所有静态资源的引用都需要相对新的根目录进行调整。如果您的HTML页面中引用静态资源的方式是绝对路径或相对路径未考虑根目录的变化,就会出现资源找不到的情况。
解决办法如下:
修改资源引用路径:检查并更新您的HTML模板或动态生成的HTML中的资源引用(例如CSS、JS、图片等),确保它们使用相对于当前文档的正确路径或者以适应变化的根目录的方式引用。如果是相对路径,确保它们能够正确地从新的根目录下被解析。
使用location块处理静态内容:在Nginx配置中,可以为静态资源设置单独的location块,确保无论$http_path
如何变化,这些资源都能被正确找到。例如:
server {
...
root /www/wwwroot/baidu.com/$http_path;
location /static/ {
alias /www/wwwroot/baidu.com/static/; # 假设所有静态资源都在此目录下
}
# 其他location配置...
}
这样,即使应用的根目录改变了,通过/static/
前缀引用的资源都会从固定的静态资源目录提供服务,不受$http_path
变动的影响。
try_files
指令可以帮助查找正确的资源文件位置,避免404错误。请根据您的实际情况选择合适的解决方案,并适当调整Nginx配置。记得每次修改配置后测试其有效性,并重启Nginx服务使改动生效。