首页
关于
留言
Search
1
红米 AX3000 (AX6) 路由器解锁 SSH 教程
6,676 阅读
2
网盘挂载程序sharelist美化教程
4,216 阅读
3
小米路由器 AX3600 开启SSH教程,官方固件即可安装 ShellClash开启科学上网
2,168 阅读
4
Oracle 甲骨文 ARM VPS 自动抢购脚本
1,819 阅读
5
编译带PassWall和SSR-plus插件的Openwrt系统
1,393 阅读
前端
Vue
React
后端
Java
Python
PHP
数据库
运维
杂谈
小程序
影视资源
登录
Search
标签搜索
Java
Linux
Mysql
IDEA
Debian
Docker
Springboot
CentOS
Cloudflare
Maven
JavaScript
SQL
Wordpress
宝塔
Nginx
Windows
MacBook
JS
CSS
Openwrt
William
累计撰写
144
篇文章
累计收到
702
条评论
首页
栏目
前端
Vue
React
后端
Java
Python
PHP
数据库
运维
杂谈
小程序
影视资源
页面
关于
留言
搜索到
58
篇与
的结果
2021-07-07
使用Cloudflare Workers反代网站
Workers 的工作原理就是最近几年火热的 serverless。网站管理员不再一定需要一个服务器,只需要将对应的 Function 托管在 Workers 上,当用户访问网站时就会执行对应的 Function,值得一提的是 Cloudflare Workers 本质上只支持 JS反代代码// 需要反代的地址 const upstream = 'www.example.com' // 反代地址的子路径 const upstreamPath = '/' // 反代网站的移动端域名 const upstreamMobile = 'www.example.com' // 是否使用 https const useHttps = true // 禁止使用该 worker 的国家代码 const blockedRegion = ['KP', 'SY', 'PK', 'CU'] // 禁止使用该 worker 的 ip 地址 const blockedIp = ['0.0.0.0', '127.0.0.1'] // 是否关闭缓存 const disableCache = false // 替换条件 const contentTypes = [ 'text/plain', 'text/html' ] // 反代网站中其他需要被替换的地址 const replaceDict = { '$upstream': '$workerDomain', } addEventListener('fetch', event => { event.respondWith(handleRequest(event.request)) }) /** * Respond to the request * @param {Request} request */ async function handleRequest(request) { const region = request.headers.get('cf-ipcountry') || ''; const ip = request.headers.get('cf-connecting-ip'); if (blockedRegion.includes(region.toUpperCase())) { return new Response('Access denied: WorkersProxy is not available in your region yet.', { status: 403 }); } if (blockedIp.includes(ip)) { return new Response('Access denied: Your IP address is blocked by WorkersProxy.', { status: 403 }); } const upstreamDomain = isMobile(request.headers.get('user-agent')) ? upstreamMobile : upstream; // 构建上游请求地址 let url = new URL(request.url); const workerDomain = url.host; url.protocol = useHttps ? 'https:' : 'http'; url.pathname = url.pathname === '/' ? upstreamPath : upstreamPath + url.pathname; url.host = upstreamDomain; // 构建上游请求头 const newRequestHeaders = new Headers(request.headers); newRequestHeaders.set('Host', upstreamDomain); newRequestHeaders.set('Referer', url.protocol + '//' + workerDomain); // 获取上游响应 const originalResponse = await fetch(url.href, { method: request.method, headers: newRequestHeaders }) const connectionUpgrade = newRequestHeaders.get("Upgrade"); if (connectionUpgrade && connectionUpgrade.toLowerCase() === "websocket") { return originalResponse; } let originalResponseClone = originalResponse.clone(); // 构建响应头 let responseHeaders = originalResponseClone.headers; let newResponseHeaders = buildResponseHeaders(responseHeaders); if (newResponseHeaders.get("x-pjax-url")) { newResponseHeaders.set("x-pjax-url", responseHeaders.get("x-pjax-url").replace("//" + upstreamDomain, "//" + workerDomain)); } // 构建响应体 let originalText; const contentType = newResponseHeaders.get('content-type'); if (contentType != null) { const types = contentType.replace(' ','').split(';') if (types.includes('charset=utf-8')){ for (let i of contentTypes) { if (types.includes(i)){ originalText = await replaceResponseText(originalResponseClone, upstreamDomain, workerDomain); break } } } } else { originalText = originalResponseClone.body } return new Response(originalText, { status: originalResponseClone.status, headers: newResponseHeaders }) } function isMobile(userAgent) { userAgent = userAgent || '' let agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"]; for (let v = 0; v < agents.length; v++) { if (userAgent.indexOf(agents[v]) > 0) { return true; } } } function buildResponseHeaders(originalHeaders) { const result = new Headers(originalHeaders); if (disableCache) { result.set('Cache-Control', 'no-store'); } result.set('access-control-allow-origin', '*'); result.set('access-control-allow-credentials', true); result.delete('content-security-policy'); result.delete('content-security-policy-report-only'); result.delete('clear-site-data'); return result } async function replaceResponseText(response, upstreamDomain, workerDomain) { let text = await response.text() const placeholders = { "$upstream": upstreamDomain, "$workerDomain": workerDomain } for (let origin in replaceDict) { let target = replaceDict[origin] origin = placeholders[origin] || origin target = placeholders[target] || target const re = new RegExp(origin, 'g') text = text.replace(re, target); } return text; }
2021年07月07日
136 阅读
0 评论
0 点赞
2021-06-23
轻松搭建 FRP 内网穿透并设置开机自启动方法
1.它是什么?干嘛用的?先假设这样一个场景,在仅有的IPV4的环境下,你身处外面使用手机数据流量,想访问家里的路由器界面(如192.168.1.1),但奈何路由设备仅仅存与家庭局域网中,无法访问,怎么让路由器管理界面在世界各地都可以访问呢?Frp内网穿透工具就是为了解决这样一个问题的,可以在有网络的任何地方访问到你家庭的设备。家里头无法在外面访问的网络,我们以下称为内网公网:与内网相反,为什么我们都可以在任何地方访问百度?因为百度的服务器放在了一个大家都可以访问到底网络,公共使用的网络--公网2. Frp工具是如何做到的?简单的说转发,它需要一台在公网设备的帮助转发;借助下面的图就懂了Frp服务器部署在公网中,它是一个中间商,你想发数据给路由,先发给Frp服务器,Frp再转发给路由,路由发你的数据也是如此 IP:网络地址,字面意思,网络的地址,有地址才找到一个地方域名: 方便访问,为什么我们输入"baidu.com"就能访问百度呢?为什么大家不直接通过百度IP访问呢?不是所有人都能记住那一串数字的{IP地址:xxx.xxx.xxx.xxx}3.部署所需一台具有公网IP的设备(服务器)一个属于你的域名4.进行部署1、根据你的服务器或设备类型选择对应 frp 压缩包FRP Github ReleaseCDN加速下载 windows 64位:XXX_windows_amd64.zip windows 32位:XXX_windows_386.zip linux 64位:XXX_linux_amd64.tar.gz linux 32位:XXX_linux_386.tar.gz 2、然后使用ftp或sftp或者scp等方式,将frp压缩包上传到你的服务器中(也可以直接在服务器使用wget进行下载)3、对frp压缩包进行解压,里面会有几个文件其中包括有frpc(客户端),frpc.ini(客户端配置),frps(服务器),frps.ini(服务器配置)假设上传到了服务器的root路径下,对frp文件夹进行权限设置chmod 777 -R /root/frp4、配置frp服务器参数使用vim编辑: vim frps.ini[common] bind_addr = 0.0.0.0 bind_port = 服务器监听端口(10000) bind_udp_port = UDP端口(10001) kcp_bind_port = KCP端口(10002) vhost_http_port = 80 vhost_https_port = 443 subdomain_host = 你的域名(如:yourname.xxx) dashboard_addr = 0.0.0.0 dashboard_port = 后台管理端口(11000) dashboard_user = 管理用户名(root) dashboard_pwd = 管理密码(你自己填一个) token = 链接密钥(你自己想一个,别照抄啊!如:ABCDEFG) max_pool_count = 100 log_file = ./frps.log log_level = info log_max_days = 3 tcp_mux = true如果你的服务器已经部署了网站那些,也就是80跟443端口已经被占用,那么 vhost_http_port 和 vhost_https_port 这两个端口也需要改变。总之,frps.ini 中的任何端口不能跟 其他frp 或 其他程序 冲突,否则服务启动失败5.启动frp所有配置完成后,正常使用frp的话,肯定是要让frp在后台运行的,以下有几种后台启动方式nohub命令:# 在root根目录下执行 nohup /root/frp/frps -c /root/frp/frps.iniscreen命令:# 在frp目录下执行 screen -S frp ./frps -c ./frps.inirc.local修改/etc/rc.local文件,加入启动命令/root/frp/frps -c /root/frp/frps.ini &systemctl创建并编辑 frps.service 文件,执行代码:vim /lib/systemd/system/frps.service然后在该文件输入以下代码,并保存退出:[Unit] Description=Frp Server Service After=network.target [Service] Type=simple User=root Restart=on-failure RestartSec=5s ExecStart=/存放frp的目录/frps -c /存放frp的目录/frps.ini LimitNOFILE=1048576 [Install] WantedBy=multi-user.target「操控命令」启动服务 systemctl start frps开机自启动 systemctl enable frps重启服务 systemctl restart frps停止服务 systemctl stop frps查看日志与状态 systemctl status frps客户端自启动与服务端相同,只需要创建 frpc.service 并把 ExecStart 路径改为存放frpc的路径,操控命令将 frps 改为 frpc不同的系统自启动会不太一样,ubuntu,debian,centOS,windows等等,可自行百度Openwrt进入 /etc/init.d 文件夹中,创建一个名为 frp 的文件,写入以下代码:#!/bin/sh /etc/rc.common START=90 STOP=90 SERVICE=frpc USE_PROCD=1 PROC="/存放frp的目录/frps -c /存放frp的目录/frps.ini" start_service(){ procd_open_instance procd_set_param command $PROC procd_set_param respawn procd_close_instance } service_triggers(){ procd_add_reload_trigger "rpcd" }6.解析一个域名到服务器比如解析了个 frp.example.com 到你的服务器7.在浏览器中访问frp管理后台在自己电脑打开浏览器,输入frp后台管理地址,比如本例子中:域名是:frp.example.com面板端口:11000那浏览器地址栏就写 frp.example.com:11000 域名后面的端口就是frps.ini中的dashboard_port。用户名就是dashboard_user,密码是dashboard_pwd如果frps.ini中没有配置 subdomain_host 那么就使用 服务器IP:FRP面板端口 形式访问,客户端配置时也使用服务器IP如果访问frp管理后台无法打开,那就是你的服务没启动或者端口没有开放。重新检查frps.ini文件,并确定该文件中的bind_port、dashboard_port在你的防火墙(服务器安全组)中放行了8.客户端连接服务器这个客户端是你要被控制的设备,下载frp程序,下载回来后,frps相关的可以删掉了,只有frpc才是客户端使用的编辑 frpc.ini[common] server_addr = frp.example.com(刚刚设置的域名解析) server_port = 服务器监听端口(10000) / bind_port token = frp服务器中你设置的token user = 客户端名称(可以随便填一个英文字符串,给这个客户端命名) [web] //代理内网的网站 type = http //类型http local_ip = 127.0.0.1 //内网设备IP local_port = 80 //端口 subdomain = http //子域名:如此时填入的是http,则浏览器输入(http.yourname.xxx)就会访问到此设备 [ssh] type = tcp //内网TCP代理 local_ip = 127.0.0.1 //内网设备IP local_port = 22 //要代理的端口 remote_port = 11022 //代理所生成的端口,远程ssh链接需要指定为这个端口9.被控设备为Windows电脑如果要被控制的设备是Windows,比如公司的电脑,下载frp相对应的压缩包,解压后将文件夹名字改为frp,删掉frps相关文件,只留frpc文件,用记事本打开frpc.ini进行配置[common] server_addr = 你的服务器域名或者IP server_port = 服务器监听端口(10000) / bind_port token = frp服务器中你设置的token user = 给本次客户端取一个名(全英文名) tls_enable=true [windows] type = tcp local_ip = 127.0.0.1 local_port = 3389 remote_port = 33890(映射端口,可随便设置,但不能和其他frp客户端冲突,并且服务器防火墙要放行这个端口)在frp文件夹内,按住shift键盘并右键鼠标,点击右键菜单栏中的powershell,输入命令:./frpc.exe -c frpc.ini如果你看到start proxy success的字样,则表示成功了,如果没有,则表示frpc.ini配置有问题按ctrl+C停止程序运行,现在程序可以正常运行,但我们需要将其设置开机自启动需要一个叫winsw的工具,Github下载 CDN加速下载下载后放到frp的文件夹中,并改名为winsw.exe,并且新建一个文件winsw.xml用记事本打卡winsw.xml,填入下面内容,需要修改的是要运行的frp程序绝对路径,根据你的实际路径填写<service> <!-- 该服务的唯一标识 --> <id>frp</id> <!-- 该服务的名称 --> <name>frp_0.37.0_windows_amd64</name> <!-- 该服务的描述 --> <description>frpc客户端 - 实现内网穿透</description> <!-- 要运行的程序绝对路径,根据你的实际路径填写 --> <executable>C:\frp\frpc.exe</executable> <!-- 携带的参数 --> <arguments>-c frpc.ini</arguments> <!-- 第一次启动失败 60秒重启 --> <onfailure action="restart" delay="60 sec"/> <!-- 第二次启动失败 120秒后重启 --> <onfailure action="restart" delay="120 sec"/> <!-- 日志模式 --> <logmode>append</logmode> <!-- 指定日志文件目录(相对于executable配置的路径) --> <logpath>logs</logpath> </service>在frp文件夹中,按住shift并点击鼠标右键,可以在右键菜单栏中看到powershell,输入.\winsw.exe install,如下图如果提示下面,则成功!成功!重启电脑(被控制设备)后用手机端试试能不能远程桌面吧下载Remote Desktop安装,PC name(电脑名)那里输入FRP服务器域名/IP:端口(上面的remote_port = 33890)比如:frp.example.com:33890
2021年06月23日
253 阅读
0 评论
0 点赞
2021-05-21
小米路由器 AX3600 开启SSH教程,官方固件即可安装 ShellClash开启科学上网
小米 AX3600 采用的是高通 IPQ8071A 4核心 1.4GHz A53 的 CPU,外加上双核主频高达 1.7GHz 的 NPU,这让这款路由器的跑「加密解密」类的代理性能特别特别的好。开启 SSH 和 安装 ShellClash 都不会影响固件正常的更新升级,也不会影响官方固件的功能, 如果你有这方面的需求会是非常棒的选择。你基本不需要任何准备,有台能上网的电脑甚至手机都可以,最好用网线连接到小米 AX3600 路由器。提前下载好所需文件,下载链接:隐藏内容,请前往内页查看详情开启 AX3600 SSH降级下载 AX3600 1.0.17 的固件,在路由器后台选择本地「固件升级」,就会清除现有数据降级,等待降级完成后重新设置好路由器即可。获取后台 STOK 登陆小米路由器后台后,浏览器地址栏 stok= 后面的一段内容即是(选中部分),准备好备用。获取 SSHhttp://192.168.31.1/cgi-bin/luci/;stok=<STOK>/api/misystem/set_config_iotdev?bssid=Xiaomi&user_id=longdike&ssid=-h%3B%20nvram%20set%20ssh_en%3D1%3B%20nvram%20commit%3B%20sed%20-i%20's%2Fchannel%3D.*%2Fchannel%3D%5C%22debug%5C%22%2Fg'%20%2Fetc%2Finit.d%2Fdropbear%3B%20%2Fetc%2Finit.d%2Fdropbear%20start%3B将 替换为上一步的值,替换完成后复制到浏览器打开。修改默认 SSH 密码为 adminhttp://192.168.31.1/cgi-bin/luci/;stok=<STOK>/api/misystem/set_config_iotdev?bssid=Xiaomi&user_id=longdike&ssid=-h%3B%20echo%20-e%20'admin%5Cnadmin'%20%7C%20passwd%20root%3B将 替换为上上一步的值,替换完成后复制到浏览器打开。备份现在应该可以通过 ssh 连接到 小米 AX3600 了,终端里执行(密码是 admin)ssh root@192.168.31.1在小米 AX3600 上执行mkdir /tmp/syslogbackup/ dd if=/dev/mtd9 of=/tmp/syslogbackup/mtd9浏览器请求该地址下载备份 http://192.168.31.1/backup/log/mtd9固化 SSH在电脑上将下载好的 fuckax3600 上传到小米 AX3600 的根目录(fuckax3600 路径下执行)scp fuckax3600 root@192.168.31.1:/tmp然后在小米 AX3600 上执行chmod +x /tmp/fuckax3600 /tmp/fuckax3600 unlock系统会自动重启重新 SCP 上传一遍脚本(因为 tmp 重启会被清空)scp fuckax3600 root@192.168.31.1:/tmpSSH 重新连接上小米 AX3600 后,执行chmod +x /tmp/fuckax3600 /tmp/fuckax3600 hack /tmp/fuckax3600 lock这会设置永久的 ssh、telnet、uart 权限,也会计算出默认的密码,记得保存备注:如果升级后丢失 SSH 权限,你也可以 telnet 连接上 AX3600 后执行,即可恢复 SSH。telnet 192.168.31.1 (用户名是 root,秘密是刚才得出的密码)如果你的电脑提示没有 telnet, Windows打开Telnet教程 ,Mac 则是先安装 brew 再通过 brew 安装 telnet。sed -i 's/channel=.*/channel="debug"/g' /etc/init.d/dropbear /etc/init.d/dropbear start得益于小米 AX3600 超强的 CPU + NPU 组合,跑代理速度是真不错。ShellClash 这种方案虽然没有图形化 UI 操作方便,但好在不需要刷麻烦也不稳定的 openwrt 固件,直接小米官方固件也能享受到网络「加速」的福利。
2021年05月21日
2,168 阅读
24 评论
0 点赞
2021-05-13
红米 AX3000 (AX6) 路由器解锁 SSH 教程
准备一台搭载了 OpenWrt 系统的无线路由器(下称路由 A)红米 AX3000 (aka. AX6)(下称路由 B)一台支持网线连接的电脑(下称电脑)完整的 shell-script/unlock-redmi-ax3000 源码( 下载源码 ){message type="warning" content="注意,阉割版的AX300,比如 RA81 是不适用的!只适用于AX6!只适用于AX6!只适用于AX6!"/}步骤1、登入路由 B 后台,检查固件版本。推荐的版本号为:MiWiFi 稳定版 1.0.18(点此下载),本教程仅保证在该版本下有效 若版本号不匹配,请先升级 / 降级固件。2、将电脑与路由 A 通过有线连接进入源码目录,假设路由 A 地址为 192.168.1.1,在电脑上执行命令:scp wireless.sh root@192.168.1.1:/root/wireless.sh然后通过 SSH 连接,执行下面的命令(按回车确认):警告: 执行本脚本会更改您的网络和无线设定,执行之前请务必备份相关数据sh /root/wireless.sh3、将电脑与路由 A 断开,转接到路由 B登入路由器后台,从浏览器地址栏中获取 STOK,其中的 xxx 即为 STOKhttp://192.168.31.1/cgi-bin/luci/;stok=xxx然后 依次 访问下面的 URL(STOK 不含尖括号):注意:这可能需要花费一点时间,并且有几率失败,请多尝试几次http://192.168.31.1/cgi-bin/luci/;stok=<STOK>/api/misystem/extendwifi_connect?ssid=MEDIATEK-ARM-IS-GREAT&password=ARE-YOU-OK如出现 connect success 则代表路由 B 已成功连接到路由 A,可以继续访问下一个 URL:http://192.168.31.1/cgi-bin/luci/;stok=<STOK>/api/xqsystem/oneclick_get_remote_token?username=xxx&password=xxx&nonce=xxx如出现下图中的内容,则代表 SSH 开启成功4、将必要文件传输至路由 B 刷新路由 B 后台界面,此时 5GHz 无线连接密码已经被自动更改为 SSH 登录密码进入源码目录,在电脑上执行下列命令:scp ax3000.sh root@192.168.31.1:/etc/ax3000.sh scp fuckax3000 root@192.168.31.1:/etc/fuckax3000然后通过 SSH 连接,执行下列命令:隐藏内容,请前往内页查看详情
2021年05月13日
6,676 阅读
234 评论
1 点赞
2021-04-14
京东商品配图去水印小技巧
第一步打开京东,点击你想要的图片,清楚的看见中间的京东大水印。第二步点击拖动图片到网页顶部,或者鼠标右键 在新标签页中打开图片第三步在网页链接那里找到 n0 ,然后把 n0 改为 n12 或 n0 改成 vc 即可把水印去掉
2021年04月14日
93 阅读
0 评论
0 点赞
2021-04-08
开通支付宝当面付0.38%费率教程
支付宝当面付是帮助商家在线下消费场景下实现快速收款,当面付产品支持条码支付和扫码支付两种付款方式。而我们需要当面付一般都是在网上开通接口,进行网站收款执行回调。本文就来仔细介绍一下支付宝当面付收款申请步骤以及一些注意事项!其实在支付宝商家服务里直接也可以申请,大家可以去试一试!开通步骤:1、开通当面付申请的支付宝账户类型需要是经过实名认证的个人/企业支付宝账户2、进入支付宝开放平台 商户签约管理,点击新增商家3、然后需要输入我们要开通当面付的支付宝账号,可以是自己的也可以是别人的。(代开当面付其实就是在这里帮别人提交资料而已)4、然后选择开通当面付这个功能,有空的可以把花呗分期的也签约了。新号不支持签约花呗分期。5、然后我们填写商家资料就可以了,营业执照是非必填的。我们店铺招牌上传店铺的门头面,营业资质去上传店铺的内景。6、联系人信息务必填写正确,审核通过后会通过电子邮件和手机短信来通知的,费率输入0.38%即可。7、提交后在工作日等待半小时就会通过了,通过后需要登录邮箱进行签约。如果你是帮别人代开的就要叫他进行确认签约即可。当面付优点付款方式支持信用卡,花呗;付款后可获得支付宝积分;支持API接口对接收款当面付规则1、签约时未提供同名营业执照(营业执照主体与支付宝账户认证主体同名),收款将会受到一定的限制,具体限制规则为交易限额:单笔收款≤1000,单日收款≤5W,不区分借记或贷记渠道。2、签约时提供了同名营业执照,或者签约后补充了同名营业执照,收款不受限额。 您可以登录商家后台,进入我的产品,通过资质凭证补全来恢复正常的产品使用。
2021年04月08日
123 阅读
0 评论
0 点赞
2021-03-26
B2+cloudflare+ShareX,实现无成本图床和便捷上传
首先要准备好3个条件一个cloudflare账号 https://dash.cloudflare.com/一个B2账号 https://www.backblaze.com/b2/cloud-storage.htmlWindows软件ShareX步骤1、注册B2账号,点击进入B2 Cloud Storage,点击Buckets创建一个BUcket,设为public,并上传一个图片,记录下下图要用的域名2、点击App keys,添加一个新的key,bucket就选你刚创建的那个,记录下你的密钥,之后要在ShareX中用3、打开cf,cname一下上图要记的域名,小云朵点亮4、加一条页面缓存规则.5、创建一个workers,粘贴下列代码,记得b2domain和bucket的值改成自己的'use strict'; const b2Domain = 'img.domain.com'; // configure this as per instructions above const b2Bucket = 'bucket-name'; // configure this as per instructions above const b2UrlPath = `/file/${b2Bucket}/`; addEventListener('fetch', event => { return event.respondWith(fileReq(event)); }); // define the file extensions we wish to add basic access control headers to const corsFileTypes = ['png', 'jpg', 'gif', 'jpeg', 'webp']; // backblaze returns some additional headers that are useful for debugging, but unnecessary in production. We can remove these to save some size const removeHeaders = [ 'x-bz-content-sha1', 'x-bz-file-id', 'x-bz-file-name', 'x-bz-info-src_last_modified_millis', 'X-Bz-Upload-Timestamp', 'Expires' ]; const expiration = 31536000; // override browser cache for images - 1 year // define a function we can re-use to fix headers const fixHeaders = function(url, status, headers){ let newHdrs = new Headers(headers); // add basic cors headers for images if(corsFileTypes.includes(url.pathname.split('.').pop())){ newHdrs.set('Access-Control-Allow-Origin', '*'); } // override browser cache for files when 200 if(status === 200){ newHdrs.set('Cache-Control', "public, max-age=" + expiration); }else{ // only cache other things for 5 minutes newHdrs.set('Cache-Control', 'public, max-age=300'); } // set ETag for efficient caching where possible const ETag = newHdrs.get('x-bz-content-sha1') || newHdrs.get('x-bz-info-src_last_modified_millis') || newHdrs.get('x-bz-file-id'); if(ETag){ newHdrs.set('ETag', ETag); } // remove unnecessary headers removeHeaders.forEach(header => { newHdrs.delete(header); }); return newHdrs; }; async function fileReq(event){ const cache = caches.default; // Cloudflare edge caching const url = new URL(event.request.url); if(url.host === b2Domain && !url.pathname.startsWith(b2UrlPath)){ url.pathname = b2UrlPath + url.pathname; } let response = await cache.match(url); // try to find match for this request in the edge cache if(response){ // use cache found on Cloudflare edge. Set X-Worker-Cache header for helpful debug let newHdrs = fixHeaders(url, response.status, response.headers); newHdrs.set('X-Worker-Cache', "true"); return new Response(response.body, { status: response.status, statusText: response.statusText, headers: newHdrs }); } // no cache, fetch image, apply Cloudflare lossless compression response = await fetch(url, {cf: {polish: "lossless"}}); let newHdrs = fixHeaders(url, response.status, response.headers); if(response.status === 200){ response = new Response(response.body, { status: response.status, statusText: response.statusText, headers: newHdrs }); }else{ response = new Response('File not found!', { status: 404 }) } event.waitUntil(cache.put(url, response.clone())); return response; }6、workers里添加路由,使访问你的域名时,先走workers访问一下你的图片文件比如说一开始是https://f000.backblazeb2.com/file/backblaze1489498/wallhaven-md2x8m.jpg现在用https://dlcu.cf/wallhaven-md2x8m.jpg就可以访问了7、配置ShareX这个感觉没啥好说的,主页面–目标–上传目标设置–backblaze b2,填上就行了文章来自网络
2021年03月26日
21 阅读
0 评论
0 点赞
2021-03-02
WordPress的一些优化代码
把下面的代码放进主题的 functions.php 最下面:/*-----------------------------------------------------------------------------------*/ /* Disable the emoji's /*-----------------------------------------------------------------------------------*/ function disable_emojis() { remove_action( 'wp_head', 'print_emoji_detection_script', 7 ); remove_action( 'admin_print_scripts', 'print_emoji_detection_script' ); remove_action( 'wp_print_styles', 'print_emoji_styles' ); remove_action( 'admin_print_styles', 'print_emoji_styles' ); remove_filter( 'the_content_feed', 'wp_staticize_emoji' ); remove_filter( 'comment_text_rss', 'wp_staticize_emoji' ); remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' ); //add_filter( 'tiny_mce_plugins', 'disable_emojis_tinymce' ); } add_action( 'init', 'disable_emojis' ); /** * Filter function used to remove the tinymce emoji plugin. * * @param array $plugins * @return array Difference betwen the two arrays */ function disable_emojis_tinymce( $plugins ) { if ( is_array( $plugins ) ) { return array_diff( $plugins, array( 'wpemoji' ) ); } else { return array(); } } /*-----------------------------------------------------------------------------------*/ /* 去除头部菜单 /*-----------------------------------------------------------------------------------*/ add_filter( 'show_admin_bar', '__return_false' ); /*-----------------------------------------------------------------------------------*/ /* 去除头部冗余代码 /*-----------------------------------------------------------------------------------*/ remove_action('wp_head', 'feed_links_extra', 3); remove_action('wp_head', 'rsd_link'); remove_action('wp_head', 'wlwmanifest_link'); remove_action('wp_head', 'index_rel_link'); remove_action('wp_head', 'start_post_rel_link', 10, 0); remove_action('wp_head', 'wp_generator' ); //隐藏wordpress版本 remove_filter('the_content', 'wptexturize'); //取消标点符号转义 remove_action('rest_api_init', 'wp_oembed_register_route'); remove_filter('rest_pre_serve_request', '_oembed_rest_pre_serve_request', 10, 4); remove_filter('oembed_dataparse', 'wp_filter_oembed_result', 10); remove_filter('oembed_response_data', 'get_oembed_response_data_rich', 10, 4); remove_action('wp_head', 'wp_oembed_add_discovery_links'); remove_action('wp_head', 'wp_oembed_add_host_js'); // Remove the Link header for the WP REST API // [link] => <http://cnzhx.net/wp-json/>; rel="https://api.w.org/" remove_action( 'template_redirect', 'rest_output_link_header', 11, 0 ); /*-----------------------------------------------------------------------------------*/ /* 去除谷歌字体 /*-----------------------------------------------------------------------------------*/ function coolwp_remove_open_sans_from_wp_core() { wp_deregister_style( 'open-sans' ); wp_register_style( 'open-sans', false ); wp_enqueue_style('open-sans',''); } add_action( 'init', 'coolwp_remove_open_sans_from_wp_core' ); /*-----------------------------------------------------------------------------------*/ /* 修改后台字体 /*-----------------------------------------------------------------------------------*/ function admin_lettering(){ echo'<style type="text/css"> body{ font-family: Microsoft YaHei;} </style>'; } add_action('admin_head', 'admin_lettering'); /*-----------------------------------------------------------------------------------*/ /* Gravatar头像使用中国服务器 /*-----------------------------------------------------------------------------------*/ function ea_change_avatar_v2ex( $avatar ) { $avatar = preg_replace("/https:\/\/(secure|\d).gravatar.com\/avatar\//","https://dn-qiniu-avatar.qbox.me/robohash/",$avatar); return $avatar; } add_filter('get_avatar', 'ea_change_avatar_v2ex'); /*-----------------------------------------------------------------------------------*/ /* 阻止站内文章互相Pingback /*-----------------------------------------------------------------------------------*/ function theme_noself_ping( &$links ) { $home = get_option( 'home' ); foreach ( $links as $l => $link ) if ( 0 === strpos( $link, $home ) ) unset($links[$l]); } add_action('pre_ping','theme_noself_ping'); /*-----------------------------------------------------------------------------------*/ /* 删除后台某些版权和链接@wpdx /*-----------------------------------------------------------------------------------*/ add_filter('admin_title', 'wpdx_custom_admin_title', 10, 2); function wpdx_custom_admin_title($admin_title, $title){ return $title.' ‹ '.get_bloginfo('name'); } /*-----------------------------------------------------------------------------------*/ /* 去掉wordpress logo /*-----------------------------------------------------------------------------------*/ function remove_logo($wp_toolbar) { $wp_toolbar->remove_node('wp-logo'); } add_action('admin_bar_menu', 'remove_logo', 999); /*-----------------------------------------------------------------------------------*/ /* 去掉wp版权 /*-----------------------------------------------------------------------------------*/ function change_footer_admin () {return '';} add_filter('admin_footer_text', 'change_footer_admin', 9999); function change_footer_version() {return '';} add_filter( 'update_footer', 'change_footer_version', 9999); /*-----------------------------------------------------------------------------------*/ /* 去掉挂件 /*-----------------------------------------------------------------------------------*/ function disable_dashboard_widgets() { //remove_meta_box('dashboard_recent_comments', 'dashboard', 'normal');//近期评论 //remove_meta_box('dashboard_recent_drafts', 'dashboard', 'normal');//近期草稿 remove_meta_box('dashboard_primary', 'dashboard', 'core');//wordpress博客 remove_meta_box('dashboard_secondary', 'dashboard', 'core');//wordpress其它新闻 remove_meta_box('dashboard_right_now', 'dashboard', 'core');//wordpress概况 //remove_meta_box('dashboard_incoming_links', 'dashboard', 'core');//wordresss链入链接 //remove_meta_box('dashboard_plugins', 'dashboard', 'core');//wordpress链入插件 //remove_meta_box('dashboard_quick_press', 'dashboard', 'core');//wordpress快速发布 } add_action('admin_menu', 'disable_dashboard_widgets'); /*-----------------------------------------------------------------------------------*/ /* 去掉无用小工具 /*-----------------------------------------------------------------------------------*/ function unregister_default_widgets() { unregister_widget( 'WP_Widget_Pages' ); unregister_widget( 'WP_Widget_Calendar' ); unregister_widget( 'WP_Widget_Meta' ); unregister_widget( 'WP_Widget_Search' ); unregister_widget( 'WP_Widget_Categories' ); unregister_widget( 'WP_Widget_Recent_Posts' ); unregister_widget( 'WP_Widget_Recent_Comments' ); unregister_widget( 'WP_Widget_RSS' ); } add_action("widgets_init", "unregister_default_widgets", 11);
2021年03月02日
21 阅读
0 评论
0 点赞
1
...
4
5
6
...
8