博客 (102)

控制台 - 全局 - 站点信息 - 站点名称

控制台 - 全局 - SEO设置 - 论坛

image.png

image.png

xoyozo 5 天前
45
  1. 购买 ECS

  2. 解析域名、挂载磁盘(若有另购)、修改实例名称、配置安全组、设置快照策略、安装云监控插件并在应用分组添加服务器、云安全中心防勒索安装客户端并配置策略资产

  3. 远程连接进入 ECS(若解析未生效可以先用 IP)(若新服默认使用 22 端口,可先在安全组临时放行 22 端口)

  4. 修复系统漏洞(阿里云-云安全中心-漏洞管理)

  5. 安装宝塔面板(本文以宝塔面板方案为例,选择任何你喜欢的环境部署方案都行)

  6. 将磁盘挂载到目录(fdisk、df 命令参考:https://xoyozo.net/Blog/Details/SSH

  7. 临时放行宝塔面板端口,进入宝塔面板(http方式)

  8. 配置面板 SSH、添加新的安全端口、面板设置

  9. 更改 SSH 默认端口(参:https://xoyozo.net/Blog/Details/change-default-port

  10. 安装 nginx、PHP 等

  11. 配置 PHP 扩展(Redis、sqlsrv(注意选择兼容的版本))

  12. 创建网站,配置网站(路径、伪静态等)

  13. 迁移网站文件(参:https://xoyozo.net/Blog/Details/SSH

  14. 仔细对比新旧网站的配置文件(特别是 .php 的访问权限,参:https://xoyozo.net/Blog/Details/nginx-location-if

  15. 设置写入目录(使用 rsync 同步的文件会同步用户和权限)

  16. 解析域名(先改 hosts 测试网站功能)

  17. 更改内网其它 ECS 上的 hosts

  18. 关闭原 ECS(能马上发现问题,不然等运行一段时间才发现问题就麻烦点)

  19. 设置 FTP

  20. 迁移“计划任务”

  21. 所有网站和软件的配置文件都要使用 WinMerge 进行对比

  22. 移除“宝塔面板-安全”和“阿里云-ECS-安全组”中不用的端口


更多文章:

从零搭建一台阿里云 ECS(Windows Server)并迁移网站

xoyozo 28 天前
405

前往活动页面>>>

一、活动时间
2023年10月31日0点0分0秒至2026年3月31日23点59分59秒

二、活动对象
同时满足以下全部条件的阿里云用户:
1、阿里云注册会员用户;
2、完成阿里云实名认证;
3、符合活动规则的新老用户,均可参与。

三、活动权益参与规则
1、云服务器ECS经济型e实例(简称“99实例”或“99元e实例”)活动范围:
个人认证或者企业认证的用户购买指定配置“e实例2核2G,3M固定带宽,40G ESSD Entry 系统盘”可享受包1年99元,活动地域包含北京,杭州,上海,张家口,呼和浩特,深圳,成都,河源,乌兰察布,广州。
2、云服务器通用算力型u1实例(简称“199实例”或“199元u1实例”)活动范围:
企业认证的用户购买指定配置“u1实例2核4G,5M固定带宽,80G ESSD Entry 系统盘”可享受包1年199元,活动地域包含青岛,北京,杭州,上海,深圳,成都,河源,乌兰察布,广州,中国香港,日本(东京),新加坡,美国(硅谷),英国(伦敦),德国(法兰克福)。
3、活动说明:
在活动期间内,同一个人认证主体只可保有1个“99元e实例”;同一企业认证主体最多可同时保有1个“99元e实例”和1个“199元u1实例”,实例到期后在活动时间范围内可持续以低价续费保有,另购使用官网价。本次优惠不可与优惠券叠加使用。同一用户同一时间只能保有一个“99实例”或者“199实例”。

四、购买场景
1、新购场景:
在符合参与规则的情况下,直接低价购买指定配置产品,有效期1年。若无法购买,请确认是否存在同人或其他实例已占用等情况。
2、续费场景:
在活动时间内,指定配置每年最多可以以优惠价格续费1次,1次1年,直到活动时间结束持续享受续费优惠。
备注:若续费其他实例时使用了低价权益,原低价产品实例将无法再享受低价权益。
根据以上规则,常见场景有以下几种:

场景1:若您在2023年10月31日新购“99元e实例”,您可在2023年10月31日至2024年10月30日(即新购后的一年内)完成第一次续费(此时服务器到期时间为2025年10月30日);可在2024年10月31日至2025年10月30日完成第二次续费(此时服务器到期时间为2026年10月30日);可在2025年10月31日至2026年3月31日完成第三次续费(此时服务器到期时间为2027年10月30日);
即连续以99元1年的价格续费3年,可以使用“99元e实例”至2027年10月30日,该服务器总保有时长4年。

场景2:若您在2026年3月31日(活动截止前最后一天)新购“99元e实例”/“199元u1实例”,您可在2026年3月31日当天完成一次续费(此时服务器到期时间为2028年3月31日);
即以99元/199元1年的价格续费1年,可以使用“99元e实例”/“199元u1实例”至2028年3月31日,该服务器总保有时长2年。

场景3:若您在2024年4月1日新购“99元e实例”/“199元u1实例”,您可在2024年4月1日至2025年3月31日完成第一次续费(此时服务器到期时间为2026年3月31日);您可在2025年4月1日至2026年3月31日完成第二次续费(此时服务器到期时间为2027年3月31日);
即连续以99元/199元1年的价格续费2年,可以使用“99元e实例”/“199元u1实例”至2027年3月31日,服务器总保有时长3年。

3、退订场景:
支持五天无理由退款,退款后保留“低价长效”优惠资格,在活动时间范围内可再次使用低价购买活动配置;
4、变配场景:
变配至“低价长效优惠”指定配置时当前付费周期不享受低价权益,续费时可享受包1年99元/199元优惠;“低价长效优惠”指定配置发生变配/升级/降配操作后,变配需按照官网价补差价,请仔细阅读变配页面引导及相关资费说明,但仍占用权益资格直到该实例释放,购买相同规格产品不能再享受低价,同时续费时也不再享受包1年99元/199元优惠;
5、如用户账号有欠费,需先补足欠费再进行购买。
6、低价权益产品仅供账号本人使用,不允许过户转让。
7、如在参与“低价长效”优惠过程中,使用其他收费产品/功能,则需按照产品/功能标准资费支付超额产生的费用。
8、其他规则:
阿里云有权根据业务需求,随时调整提供给用户低价购买的产品范围、产品数量、产品配置、购买规则等,用户应以购买时相关页面的展示内容为准,但不影响用户在活动规则调整前已经获得的权益。
9、禁止使用产品来挖掘货币,如您使用产品来挖掘货币,可能会被收取费用及取消权益资格。
10、为保证活动的公平公正,如用户在活动中存在隐瞒、虚构、作弊、欺诈或通过其他非正常手段规避活动规则、获取不当利益的行为,例如:作弊领取、恶意套现、网络攻击、虚假交易等,阿里云有权收回相关权益、取消用户的活动参与资格,撤销违规交易,必要时追究违规用户的法律责任。
您应确保您对云服务器的使用不侵犯他人著作权,不会用于私服架设服务、私服程序、私服网站、私服源码、私服服务器和空间等。

五、常见FAQ:
1.用户在购买完99实例/199实例后,如果因某些原因导致需要退款或者释放实例,还可以再以99元/199元的优惠价格重新购买吗?
答:可以,99实例/199实例支持五天无理由退款,退款后仍然保留优惠资格,用户在活动时间范围内可再次使用低价购买活动配置;
2.活动规则里写的1年续费1次中,“1年”指的是自然年吗?
答:“1年”指的是云服务器购买1年的付费周期,即两次续费时间必须间隔1年以上;
3.99实例/199实例优惠套餐最多可以享受几年的优惠?
答:若您在24年3月31日前首次新购99实例/199实例优惠套餐,最多可以享受4年优惠(包含新购1次,续费3次,1次1年);

六、相关名词及解释
1、“阿里云官网”,是指包含域名为 www.aliyun.com/ 的网站以及阿里云客户端,如APP,但阿里云国际站,包括alibabacloud.com以及所有下属页面和jp.aliyun.com以及所有下属页面除外。
2、“同一用户”,是指根据不同阿里云账号在注册、登录、使用中的关联信息,阿里云判断其实际为同一用户。关联信息举例:同一手机号、同一邮箱、同一证件等。
3、“同人账号”,是指同一用户拥有多个阿里云账号的,各个账号之间互为同人账号。
4、“新用户”,是指在阿里云官网没有收费云产品购买记录的阿里云会员用户。新用户在进行首次云产品购买行为时,也被称为“首购用户”。
5、“老用户”,是指在阿里云官网已有收费云产品购买记录的阿里云会员用户。
6、“云产品”,是指阿里云官网售卖的中国大陆节点的产品和服务,但不包括域名、虚拟主机、云市场产品、专有云产品,云通信产品。
7、“指定云产品”,是指某场具体活动页面列举的活动云产品。
8、活动中涉及“打折”、“折扣”、“×折”或“省××元”,是指将本活动期间的某款产品的活动价格,与无任何活动期间的相同产品的日常最小单位售价(例如:月价),按相同购买时长进行比较后,所获得的比较结果。
9、活动涉及的“划线价”、“日常价”,通常是指该产品曾经展示过的销售价,并非原价,仅供参考。具体活动页面单独对“划线价”、“日常价”进行说明的,以其表述为准。
10、除非有相反证据证明外,用户参与活动所获得的全部权益和相应责任,均归属于参与活动的该阿里云账号所对应的实名认证主体。
11、活动中的“天”、“日”、“工作日”等均指该日的0点至24点(北京时间)。
12、阿里云可以根据活动的实际情况对活动规则进行变动或调整,相关变动或调整将公布在活动页面上,并于公布时即时生效;但不影响用户在活动规则调整前已经获得的权益。您购买阿里云单项产品时,亦应遵守该产品法律服务协议。
13、活动页面提到的“核” ,均指vcpu。

xoyozo 28 天前
433

本文基于 manifest v3


插件使用 Web 技术开发

浏览器提供额外的插件 API

插件与网页分离,运行在一个独立的环境中


插件 API 功能

  • 管理 Tabs、窗口、历史记录、书签、Cookies、下载、浏览数据、通知、网站权限

  • 管理浏览器的外观和感觉 - 背景、主题、右键菜单、新标签页、启动页面

  • 定制 DevTools

  • 向网页注入脚本,与网页通信,与系统中的 Native 应用程序通信

  • 修改/监听发送的 HTTP 请求/接收的回复


插件构成

结构功能调用 API操作 Dom进程
manifest配置文件-

popup弹出对话框所有
Extension process
option page用户使用的设置页面所有

background script后台脚本所有禁止?Extension process
content script内容脚本(注入到网页中)有限允许Renderer process

* 即便 content script 是注入到网页中的,而且是运行在 Renderer 进程(与主网页相同的进程),但是它们仍运行在不同的世界(world)。主网页运行在 main world,插件的 content script 运行在 isolated world。比如说 main world 中有一个变量,它在 isolated world 中是访问不到的,但是如果修改了 dom,对其它世界是有影响的。


将 Chrome 插件迁移到 Edge

  • 移除 Chrome 独有的 API(如调用 Google 账户)

  • 移动 update_URL 字段(如果是从 Chrome 商店直接下载的包会有这个字段)

  • 改名 Chrome 相关的文字(插件名称、描述文字)


参考文献

  1. Microsoft Edge 扩展入门(官方)

  2. 一小时精通Edge扩展开发Microsoft Edge 文档(视频)

xoyozo 4 个月前
429

可能的原因是 IIS 安装了“WebDAV 发布”,在 IIS - 模块 中可见 WebDAVModule

解决方法:在网站的 web.config 中设置:

<system.webServer>
    <modules>
        <remove name="WebDAVModule" />
    </modules>
</system.webServer>

或在 IIS 中,在该网站的模块中删除 WebDAVModule。

如果网站需要用到 WebDAV 模块,那么考虑使用 Fetch API 或 XMLHttpRequest 来发送请求。


xoyozo 7 个月前
574
  1. 购买 ECS

  2. 解析域名、挂载磁盘(若有另购)、修改实例名称、配置安全组、设置快照策略、安装云监控插件并在应用分组添加服务器、云安全中心防勒索安装客户端并配置策略资产

  3. 远程连接进入 ECS(若解析未生效可以先用 IP)

  4. 开启 Windows 防火墙(使用推荐设置)

  5. Windows 更新

  6. 安装 IIS:服务器管理器-添加角色和功能-勾选“Web 服务器(IIS)”包括管理工具

    建议勾选:

    默认已勾选项

    按需安装 IP 和域限制

    常见 HTTP 功能(不建议安装 WebDAV 发布

    跟踪(即“失败请求跟踪”)

    请求监视器、日志记录工具、

    按需安装 ASP

    按需安装 ASP.NET 4.8(会同时勾选 .NET Extensibility 4.8、ISAPI 扩展、ISAPI 筛选器)

    按需安装 WebSocket 协议

    应用程序初始化(建议安装)

    管理服务(用于 Web 部署)

  7. 细节:设置任务栏;设置桌面图标;个性化-颜色-勾选“标题栏和窗口边框”;设置输入法;

  8. 更改远程桌面端口

  9. 按需安装:

    下载 URL 重写(文件名:rewrite_amd64_zh-CN.msi)

    下载 MySQL Connector/NET(文件名:mysql-connector-net-8.0.19.msi)

    下载 ASP.NET Core 运行时 Hosting Bundle(文件名:dotnet-hosting-*.*.*-win.exe)

    下载 .NET 桌面运行时 Windows x64(文件名:windowsdesktop-runtime-*.*.*-win-x64.exe)

    下载 Web Deploy(文件名:WebDeploy_amd64_zh-CN.msi)

  10. 服务:设置“ASP.NET State Service”自动启动

  11. IIS 日志:路径(如 D:\wwwlogs),每小时(统一设置一个全局的就行了,不需要设置每个网站),按需勾选“使用本地时间进行文件命名和滚动更新”

  12. IIS 导入证书:个人、允许导出证书。

  13. 设置默认网站的 https

  14. 设置权限:设置网站所在分区(如 D 盘),安全,添加 IIS_IUSRS,全部拒绝(防止跨站)

  15. 添加用户:为每个网站创建用户(既能防止跨站,又能跟踪进程),密码不能改、不过期,仅隶属于 IIS_IUSRS,并添加到每个网站的根目录

  16. 创建网站:设置访问物理路径的用户;设置应用程序池的“标识”用户;编辑绑定:勾选需要服务器名称指示;检查域名是否绑全;设置写入目录;

  17. 重复上面两步

  18. 检查所有网站用户是否仅隶属于 IIS_IUSRS(在“组”页面双击 Users 和 IIS_IUSRS 查看成员)

  19. 在应用程序池列表页面检查 CLR 版本、管托管道模式和标识;在网站列表页面检查绑定和路径

  20. 设置 Web 部署

  21. 设置“IP 地址和域限制”

  22. 废弃旧服时再次检查:IIS 中各功能设置、hosts、安装的应用程序、启动项、服务、防火墙等

  23. 更改默认端口

  24. 解析各网站域名

  25. 其它:资源管理器-查看-选项-查看-去掉“始终显示图标,从不显示缩略图”前的勾


>> 关于域名解析

因各地域名解析生效时间不可控,一般国内域名 1 天内,国际域名 2 天内。

  • 若网站数据库在 RDS、上传文件在 OSS,则解析 48 小时后直接停止原网站即可;(比较理想的)

  • 文件上传到 ECS 的可使用 FTP 等工具定时同步文件,或直接停止原网站。(网友会遇到新文章中图片无法显示等问题)

  • 还有一种方法是新网站提前解析一个备用域名,确保完全生效后再修改正式域名的解析,原网站无条件跳转到备用域名,如果数据库中有保存完整网址路径的,关闭原网站并解绑备用域名之后,进行批量替换。(缺点是可能会影响在搜索引擎的网站权重)

  • 部分有定时器的网站要注意,如果两个网站的定时器都正常开启会导致意外的,需要停止其中一个网站的定时器。

当然每种方法都有优缺点,选择可以接受且方便的一种即可。


更多文章:

从零搭建一台阿里云 ECS(Alibaba Cloud Linux / CentOS / Linux)并迁移网站

xoyozo 7 个月前
1,597

本文图片基于网络图片更新,如有侵权,请通过网站底部联系站长删除。

本文内容来源于网络,如有错误欢迎批评指正。


USB 接口类型

USB 接口有 Mini、Micro、Type 三种外观。

  • 通常说的 USB-C 一般指 USB Type-C,因为没有 Mini-C 和 Micro-C。而 USB-A / USB-B 一般也特指 Type-A / Type-B。


数据传输能力

USB 标准(附 Thunderbolt)

规格别名接口类型理论带宽电力规格
备注
USB 1.0Low-Speed

Mini A / B

Micro A / B 2.0

Type A / B 2.0

1.5 Mbps5V/0.5A
USB 1.1Full-Speed12 Mbps5V/0.5A
USB 2.0

Hi-Speed

High Speed

Mini A / B

Micro A / B 2.0

Type A 2.0 / B 2.0 / C

480 Mbps5V/0.5A

USB 3.0

USB 3.1 Gen 1

USB 3.2 Gen 1

SuperSpeed

Micro B 3.0

Type A 3.x / B 3.x / C

5 Gbps

5V/0.9A

PD2.0 100W


USB 3.1

USB 3.1 Gen 2

USB 3.2 Gen 2

SuperSpeed+

Micro B 3.0

Type A 3.x / B 3.x / C

10 Gbps

5V/0.9A

PD2.0 100W


USB 3.2

USB 3.2 Gen 2×2

SuperSpeed 20GbpsType-C20 GbpsPD2.0 100W

USB4 Gen 2×2

USB4 20Gbps

Type-C20 Gbps

PD3.0 100W

PD3.1 240W

兼容 Thunderbolt 3
USB4 Gen 3×2USB4 40GbpsType-C40 Gbps
USB4 2.0USB4 80GbpsType-C80 Gbps

Thunderbolt 1雷雳1、雷电1Mini DisplayPort10 Gbps

Thunderbolt 2雷雳2、雷电2Mini DisplayPort20 Gbps

Thunderbolt 3雷雳3、雷电3Type-C40 Gbps

配件供电 15W

PD 100W

兼容 USB4
Thunderbolt 4雷雳4、雷电4Type-C40 Gbps

配件供电 15W

PD 100W

兼容 Thunderbolt 3
Thunderbolt 5
雷雳5、雷电5Type-C

80Gpb

(带宽增强 120Gpbs)

240WUSB4 V2、DisplayPort 2.1 和 PCI Express Gen 4

数据参考


电力传输能力

常见快充协议

协议版本发布年份区别接口形态

BC

(Battery Charging Specification)

1.22010 年7.5W(5V/1.5A)

高通 QC

(Qualcomm Quick Charge)

1.02013 年
10W(5V/2A)Micro-USB
2.02014 

Class A:5V、9V、12V 电压可选,最大输出功率为 18W?

Class B5V、9V、12V、20V  电压可选,最大输出功率为 60W

Micro-USB / Type-A
3.02015 Class A:3.6-12V,Class B:3.6-20V支持动态调整电压和电流,最大输出功率为 18W?Micro-USB / Type-A / Type-C
4.02017 5V/5.6A 或 9V/3A,最大输出功率为 28W?兼容了 USB PD 2.0 / PD 3.0 PPS?Type-C
4+2019 最大输出功率为 100W?,支持 PPS 协议?兼容 QC2.0~QC3.0Type-C
5.02020 年最大输出功率 > 100W,兼容 QC2.0~QC4+Type-C

USB-PD

(USB Power Delivery)

1.02012 5V、12V、20V 电压可选,最大输出功率为 10WMicro-USB / Type-A / Type-B
2.0
2014 5V3A、9V3A、15V3A、20V3A、20V5A(E-Marked,最大输出功率为 100WType-C
3.02015 5V3A、9V3A、15V3A、20V3A、20V5A(E-Marked),最大输出功率为 100WType-C
3.0 PPS2017 年支持 PPS 协议,3.3V-21V 3A-5AType-C
3.12021 

SPR 最高支持 20V 电压,最大输出功率为 100W

EPR 最高支持 48V 电压,最大输出功率为 240W

Type-C
  • 华为 SuperCharge(FCP / SCP)、小米 Mi Turbo Charge、OPPO VOOC、vivo FlashCharge、三星 AFC 等私有协议不在此列出。

  • Magsafe 电源适配器 是磁吸式有线充电接口最大输出功率为 85W(截止2023年),用于 Macbook;

  • Magsafe 充电器 是磁吸式无线充电接口最大输出功率为 15W(截止2023年),用于 iPhone不属于快充。

  • Qi 是无线充电协议,Qi1 最大输出功率为 7.5W,Qi2 最大输出功率为 15W。

  • 功率决定充电速度,功率与电压电流的关系:P=U*I,如 5V1A=5W

  • 一条 USB 线由插座/母口(Receptacle)、插头/公口(Plug)和线缆(Cable)三部分组成,要实现某个协议,需要插座和插头都支持该协议

  • PPS:Programmable Power Supply 可编程电源

  • SPR:Standard Power Range 标准功率范围

  • EPR:Extended Power Range 扩展功率范围

  • FCP:Fast Charge Protocol 华为早期快充协议,支持 18W

  • SCP:Super Charge Protocol 华为超级快充协议,支持 22.5W、40W


xoyozo 1 年前
4,775

在代码

app.Run();

处报错:

System.IO.IOException:“Failed to bind to address http://localhost:5182.”

SocketException: 以一种访问权限不允许的方式做了一个访问套接字的尝试。

原因是端口被占用,解决方法:

方法一、重启电脑可能解决该问题。

方法二、使用命令 netstat -ano 找到占用该端口的进程,关闭即可。

方法三、修改运行端口。展开解决方案资源管理器中项目根目录下的“Properties”目录,打开“launchSettings.json”,找到对应你运行方式的配置,修改相应 Url 中的端口。


xoyozo 1 年前
1,747

下载 sqlmap:https://github.com/sqlmapproject/sqlmap

下载 python:https://www.python.org/downloads/

以 windows 版为例:

安装 python;

解压缩 sqlmap;

“在终端中打开 / 在命令行中打开” sqlmap.py 文件所在目录;

执行命令 

python sqlmap.py -u "网址" --data="POST数据" --tables

需要注意的是,sqlmap 会记录探测过的网址的结果信息,修复网站漏洞后要再次检测是否安全时,应删除缓存文件,位置在:

C:\Users\用户\AppData\Local\sqlmap\output\

image.png

xoyozo 2 年前
1,844

首先,禁止网站下所有 .php 等文件均不允许被访问到。

在 nginx 网站配置文件中,include enable-php-**.conf; 上方插入:

location ~ ^/.*\.(php|php5|py|sh|bash|out)$ { deny all; }

其中,^ 匹配开始,/.* 匹配所有目录和文件名,\.(php|php5|py|sh|bash|out) 匹配文件后缀名,$ 匹配结束。

即便如此,仍然忽略了 nginx 中 .php 文件名后加斜杠仍然能访问到的情况,譬如我们访问这个网址:

https://xoyozo.net/phpinfo.php/abc.html

nginx 仍然运行了 phpinfo.php,给了后门可趁之机,所以改进为:

location ~ ^/.*\.(php|php5|py|sh|bash|out)(/.*)?$ { deny all; }


Discuz! X3.4 需要写入权限的目录:

  • /自研目录/upload/

  • /config/

  • /data/

  • /uc_client/data/

  • /uc_server/data/

  • /source/plugin/

但,这些都不重要,我们已经禁止了所有目录的 .php 访问了。


第二步,解禁需要直接被访问到的文件路径。

Discuz! X3.4 根目录下的 .php 文件都是入口文件,需要能够被访问到:

/admin.php
/api.php
/connect.php
/forum.php
/group.php
/home.php
/index.php
/member.php
/misc.php
/plugin.php
/portal.php
/search.php

其它目录中需要被直接访问到的文件:

/archiver/index.php
/m/index.php
/uc_server/admin.php
/uc_server/avatar.php
/uc_server/index.php

部分插件文件需要能够被直接访问到:

/source/plugin/magmobileapi/magmobileapi.php
/source/plugin/smstong/accountinfo.php
/source/plugin/smstong/checkenv.php

另外如果有自建目录需要有 .php 访问权限,那么也需要在此处加白,本文以 /_/ 目录为例

最终拼成:工具

location ~ ^(?:(?!(/admin\.php|/api\.php|/connect\.php|/forum\.php|/group\.php|/home\.php|/index\.php|/member\.php|/misc\.php|/plugin\.php|/portal\.php|/search\.php|/archiver/index\.php|/m/index\.php|/uc_server/admin\.php|/uc_server/avatar\.php|/uc_server/index\.php|/source/plugin/magmobileapi/magmobileapi\.php|/source/plugin/smstong/accountinfo\.php|/source/plugin/smstong/checkenv\.php|/_/.*\.php))/.*\.(php|php5|py|sh|bash|out)(/.*)?)$ { deny all; }

这里用到正则表达式中的“不捕获”和“负向零宽断言”语法,格式为:

^(?:(?!(允许的目录或文件A|允许的目录或文件B))禁止的目录和文件)$

值得注意的是,此句负向零宽断言中的匹配内容是匹配前缀的,也就是说

https://xoyozo.net/index.php
https://xoyozo.net/index.php/abc.html

都可以访问到,而

https://xoyozo.net/forbidden.php
https://xoyozo.net/forbidden.php/abc.html

都访问不到,这是符合需求的。

如果自建目录 /_/ 下有写入需求,单独禁止即可,以 /_/upload/ 为例:

location ~ ^/_/upload/.*\.(php|php5|py|sh|bash|out)(/.*)?$ { deny all; }


ThinkPHP 网站有统一的访问入口,可按本文方法配置访问权限。


特别注意:上面的代码必须加在 PHP 引用配置(include enable-php-**.conf;)的上方才有效。


附:一键生成 nginx 访问控制 location URI { } 语句工具

xoyozo 2 年前
2,329