跳至主要内容

php实现文件隐藏服务器真实地址(一)

需求:


  1. 网站图片储存在不同的amazon s3上,因为各方面的考虑,amazon s3的图片服务器设置成了服务器1,服务器2。其中服务器1存储不超过90天的内容,服务器2作为存档服务器,存储在服务器1上超过90天的内容。amazon s3做了referer防盗链处理。


  2. 网站图片需要通过统一网址访问,但又不能让服务器做代理,走服务器流量。(VPS流量费超过后很贵,虽然暂时服务器流量比较低,但为了防止以后流量问题,就做这个要求)




要实现这个要求,主要有三个步骤。

检查网址是否存在。



检查网址是否存在有很多种方式方法,但由于图片服务器采用了referer防盗链处理,所以限制了一些简单的方法。以下就是检查网址是否存在的函数

function check_remote_file_exists($url) {
$curl = curl_init($url); // 不取回数据
curl_setopt($curl, CURLOPT_NOBODY, true);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET'); // 发送请求
curl_setopt($curl, CURLOPT_REFERER, "https://www.yeniugo.com/");//添加referer
$result = curl_exec($curl);
$found = false; // 如果请求没有发送失败
if ($result !== false) {

/** 再检查http响应码是否为200 */
$statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($statusCode == 200) {
$found = true;
}
}
curl_close($curl);

return $found;
}


让所有的网络请求通过一个文件处理



在apache的.htaccess上处理

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} image.yeniugo.com$
RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>


301跳转



header('HTTP/1.1 301 Moved Permanently');//发出301头部
header('Location: '.$url);//跳转到你希望的地址格式


如果这里想使用302跳转也可以

header('Location: '.$url);//跳转到你希望的地址格式


逻辑思考



剩下的就是逻辑问题了。逻辑没有什么好说的,只是最后有一个小问题,需要注意一下。
如果没有找到图片的话怎么处理的问题。
这里有两种方案


  1. 返回404错误

  2. 返回404错误图片,如果选择这种方式,从用户体验而言是比较友好的方式,但由于这里图片可能经常遇到404问题,所以建议是把这个404图片上传到一个免费的服务器上面。这里选择比较多,就不在这里一一说明了。



总结



这个功能的实现,我在很早的时候,大概10年前就想做这个的想法,但一直不知道怎么做,现在终于实现了,开心。
最后通过html源码发现,我的网址显示的依旧是原始的网址。
有一个问题需要注意,如果通过浏览器的调试工具,依然可以看到图片的真实地址。
Request URL就是该文件的真实地址。
如果走代理通道,即让所有的流量通过代理,也可以让图片显示成最初的地址,但是长期来看,服务器流量可能不够用,或者流量支出比较高,这个暂时不考虑。以后的话,可能会有这方面的考虑。
如果通过服务器做中间的代理,就可以使用另一个方案,具体实现

评论

此博客中的热门博文

非公开 app

 1.对用户 用户只能通过特定链接才能使用该 app,其他使用和应用商店 app 一致。 2.对开发 a,以应用商店提交 app 的标准方式提交 app,在备注添加一行,写上“App 将用于非公开分发”,提交 app。 b,  填写非公开 app 申请,https://developer.apple.com/contact/request/unlisted-app/ c,等待审核,整个审核过程会比平常审核慢 2-5 个工作日,后续更新应该会正常。 app分发类型 非公开app ABM App Store 企业包 app分发类型 非公开app ABM App Store 企业包 是否需要https, 自己搭建托管环境 否,文件托管到 App Store 否,文件托管到 App Store 否,文件托管到App Store 是,需要自己托管,需要 https 环境,受信任的 ssl证书 是否可以直接在 App Store 搜索到 否 否 是 否 是否可以在 App Store 展示 应用信息,包括 在应用信息页面 手动点击更新 是 否 是 不上传到App Store无 App Store信息 在应用商店 更新列表点击更新 是 是 是 否 是否需要手 动更新app 开启App Store的自动更新,就自动更新,否则手动更新 开启App Store的自动更新,就自动更新,否则手动更新,只能点我的头像,更新列表里面去更新 开启App Store的自动更新,就自动更新,否则手动更新 必须去 app 里面 点击更新,或者 去下载页面去 下载最新的app 包是否会过期 否,只要账号正常 否,只要账号正常 否,只要账号正常 是,包里面有 两个证书,虽 然只打包进一 个证书文件, 但那个证书文 件关联另一个, (打包的时候一 起使用)打包 的文件有效期1 年,关联的文 件有效期 3 年。打包的时候 是否允许马甲, 重复应用(相似 ui,相似代码) 是 是 否 是 应用商店审核要求 有,除了马甲应用,其他都一样 有,除了马甲应用,其他都一样 不允许马甲应用,其他都一样 不需要审核 是否能用其他 开发者账号上传 我们的定制版应用 未知 可以 不允许 无app store 应用上传权限 哪些版本可以 改成该版本 1.App Store包 2.企业包 1.企业包 1.企业包 ...

非公开 app 分发

非公开 app  简介 app 除了不能搜索到该 app,其他使用和普通的应用商店一致。 只需要使用对应的链接就可以跳转到该 app 。 非公开 app 上传审核流程 1.appstore connect 新建应用,配置和普通上传应用商店(公开应用)完全一致 2.在备注里面加上一行:该 app 属于非公开 app,提交 app 3.去非公开 app 申请链接app 为非公开 app,https://developer.apple.com/contact/request/unlisted-app/ 4.审核被拒,有两部分,一个是普通appstore审核被拒(可能没有),最后还会多上一个非公开 app 审核被拒的部分。等待只有非公开 app 审核被拒的问题后,再等上两天左右就好了。 5.审核通过后,会通过邮件发送该 app 的链接,此链接其实和其他 app 的链接格式一致,并无区别,唯一的区别是该 app 在应用商店搜索不到。

企业包下载安装问题

1. 下载后,去设置 ---> 通用 ---> VPN与设备管理(设备管理),找到对应的企业证书名称,选择信任即可正常打开软件使用。 2. app过期,或者系统时间手动修改到app过期时间,安装包无法正常使用,手动调整系统时间到正常时间即可正常运行。