请教: nginx 能否实现网站 B 目录下静态内容单独访问全 404,但是不影响 A 目录的主程序 PHP 对其使用?

275 天前
 neos2014

表达可能有点问题😂 , 大概就是正常对外使用 yuming.com/A/index.php , 但是有部分 js/css/jpg 以及 html 文件实际都在 /B 目录下的, nginx 能否实现: 只允许通过 yuming.com/A/index.php 这样的方式访问,用户手工构建 yuming.com/B/style.css 或者其他 B 目录下的内容,都直接 404 ? 这个思路假如不行( js/css 都得用户前端执行),那么能否将 yuming.com/B/style.css 输出为 fake.com/B/style.css 即 这不是我 yuming.com 加载给你的? 总的大概意思就是你好好按照 yuming.com/A/ 访问,没问题,你跑来猜测我 /B 的静态内容,要么给你 404 要么给你 按 fake.com/B 去给你执行, 谢谢大家😂。

1647 次点击
所在节点    程序员
13 条回复
owltacklejaguar
275 天前
```
server {
listen 80;
server_name yuming.com;

location /A/ {
if ($http_referer !~* "^http://(www\.)?yuming\.com/") {
return 404;
}

# 允许访问 /A/ 下的资源
# 配置 proxy_pass 到相应的后端服务
}

location /B/ {
return 404;
}

# 其他配置...
}
```
即第二种办法
owltacklejaguar
275 天前
当然 referer 是可以伪造的,静态资源不给正常访问,给 404 有什么意义吗
justfun
275 天前
只能通过 Referer 判断 但是没有意义 禁止不了的
klo424
275 天前
不懂就问。php 引入 js 和 css 的方式也是文件引入吧?在浏览器里面的请求会自动寻找 B 吧?那么跟用户手动构建 B 是不是就没有区别了?
Pastsong
275 天前
为了达成什么目的呢
Pastsong
275 天前
JS/CSS 地址是 PHP 输出字符串给浏览器,浏览器访问的,不是 PHP 程序加载的
flyqie
275 天前
你反正也没开列目录,这么折腾有啥意义吗。。。

理解不了,绕了一大圈啥用都没有。
flyqie
275 天前
@Pastsong #7

对,全是浏览器加载的,楼主这么玩一点意义都没有。

没开列目录的话担心猜路径属实有点多余。
flyqie
275 天前
@flyqie #8

感觉楼主要么是绕糊涂了,要么是相关基础知识不扎实。
flyqie
275 天前
想了下,你要真不想让用户直接访问的话。。

可以尝试从 header 头或者一次性防盗链入手,但终究还是没啥实际意义。。
neos2014
274 天前
谢谢大家,说下目的吧:
1 、就是让真正使用的朋友正常使用
2 、想窥探目录结构以及静态代码的,返回 404 。不过说实话,静态资源 404 不太可能了似乎😂,那么 我把静态资源重定向到 fake.com/xx00/去怎么样呢? 也就是说,js /css/jpg 挡不住你要看,那就重定向到另外一个域名+目录上,这样干扰对方的判断,我觉得这个也是可行的吧?😂
neos2014
274 天前
@flyqie 嗯 是的 一次性防盗链也是个不错的办法,谢谢大佬
neos2014
274 天前
@owltacklejaguar 谢谢大佬,我也想明白了,不需要非跟静态资源 404 较劲,重定向别的目录干扰结果也应该可行

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/966658

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX