跳至主要内容

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 分发

非公开 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 在应用商店搜索不到。

非公开 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.企业包 ...

iOS企业包下载中的下载

 首先,链接格式是itms-services://?action=download-manifest&url=https://xxxx.plist plist文件格式是 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>items</key> <array> <dict> <key>assets</key> <array> <dict> <key>kind</key> <string>software-package</string> <key>url</key> <string>ipa的完整的url,可以是http的</string> </dict> <dict> <key>kind</key> <string>display-image</string> <key>url</key> <string>小图的完整的url,可以是http的</string> </dict> <dict> <key>kind</key> <string>full-size-image</string> <key>url</key...