写在前面
前不久clash软件升级了内核,官方支持s-s/r,算是可喜的事情,但clash作者并没有向下兼容旧版clash,也就是说新旧版clash软件需要不同的订阅链接,否则无法使用。据作者所说,这是为了减少开发成本。s-s/panel目前也没有更新已兼容新版clash。
适用环境:本文基于Ma/li/o,自行修改可适配其他程序
方案:我们在网站中添加一个新的订阅按钮,来支持新版软件
2020年9月更新,实际操作中有一些问题,内容来源网络。文章内容仅供参考,可以提供一些思路。有机会我再完善文章
正文
一、找到配置文件
clash配置模板在网站根目录下的resources/conf/clash.tpl
,创建一个副本clash_new.tpl
并打开副本文件
打开后定位59行:
Proxy:
修改为:
proxies:
定位到64行:
Proxy Group:
修改为:
proxy-groups:
定位到73行(倒数第二行):
{include file='rule/lhie1_Rule.yaml'}
修改为:
{include file='rule/lhie1_New_Rule.yaml'}
二、修改规则文件
订阅和节点都没问题,测试延迟也有但就是无法上网。
定位到 resources/conf/rule
目录,找到 lhie1_Rule.yaml
文件,并创建副本重命名为lhie1_New_Rule.yaml
定位到第一行:
Rule:
修改为:
rules:
三、修改控制文件
控制文件在网站根目录/app/Utils/AppURI.php
,打开这个文件
174行在有一个叫做getClashURI
的函数,复制这个函数体并命名新函数为getNewClashURI
。也就是复制174到290行在下面粘贴并命名getNewClashURI
在粘贴后应该在356行
$return = [
'name' => $item['remark'],
'type' => 'ssr',
'server' => $item['address'],
'port' => $item['port'],
'cipher' => $item['method'],
'password' => $item['passwd'],
'protocol' => $item['protocol'],
'protocolparam' => $item['protocol_param'],
'obfs' => $item['obfs'],
'obfsparam' => $item['obfs_param']
];
break;
修改为:
$return = [
'name' => $item['remark'],
'type' => 'ssr', 'server' => $item['address'],
'port' => $item['port'],
'cipher' => $item['method'],
'password' => $item['passwd'],
'protocol' => $item['protocol'],
'protocol-param' => $item['protocol_param'],
'obfs' => $item['obfs'],
'obfs-param' => $item['obfs_param']
];
break;
四、检查是否生效
当然你也可以不检查,自信一点!
找到文件:app/Controllers/LinkController.php,找到名为getClash的函数,判断订阅链接有没有new参数,有就表示请求的是新版订阅,返回上面三处修改的文件或函数。
最后找到用户首页的视图文件,参考其他订阅代码照猫画虎加上新版clash订阅代码,复制的内容就是原版订阅+“&new=1”。
五、未整理内容
找到/resources/views/malio/user
目录打开index文件
找到在344行
{$i18n->get('import-clash-config')}
在其下增加一行
(新版)一键导入 ClashX / CFW / CFA 配置
通过查找function importSublink(client) {
定位到代码块下,找到下面内容
if (client == 'clash') {
oneclickImport('clash','{$subInfo["clash"]}')
};
在其下方增加如下内容
if (client == 'clash2') {
oneclickImport('clash','{$subInfo["clash"]}')
};
完工了。
仅有 1 条评论
第四步没有代码写出来,有点懵逼