QQ 联系获取
加 QQ 1735737677 或进群 1023163759,说清楚要哪套程序。个人自用直接发完整压缩包 + 安装文档;商业使用先谈授权再发。
GET
不在网盘挂链接,直接找作者拿,顺带把环境问清楚。
加 QQ 1735737677 或进群 1023163759,说清楚要哪套程序。个人自用直接发完整压缩包 + 安装文档;商业使用先谈授权再发。
四套演示站都开着,注册、后台、切模板都能当场试。确认功能合用再拿源码,省得来回折腾。
不会装、或者服务器不方便操作,可以把环境发给我,远程带着装一遍,或者直接帮你装好。定制开发也包含部署与运维指导。
ENV
都是五年前的主流环境:PHP 7.4 + MySQL 5.5/5.6,phpStudy 自带的 5.5.29 直接能装。
| 程序 | 版本 | 环境要求 | 演示站 | 开发文档 | 更新包与模板 |
|---|---|---|---|---|---|
| 老李站长SEO工具 | v1.0.0 | PHP 7.4+ · MySQL 5.5+ / SQLite · pdo、curl、gd | seo.h47.cn/ | 开发文档 | 程序 · 模板 |
| 老李工具箱 | v1.1.0 | PHP 7.4+ · MySQL 5.6+ · pdo、pdo_mysql、mbstring、json | tool.h47.cn/ | 开发文档 | 程序 · 模板 |
| laolicms 网站综合管理系统 | v1.0.0 | PHP 7.4+ · MySQL 5.5+ · pdo_mysql、mbstring、gd | llcms.h47.cn/ | 开发者中心 | 程序 · 模板 |
| 老李壁纸系统 | v1.2 | PHP 7.4+ · MySQL 5.6+ / SQLite · pdo_mysql,gd 可选 | bizhi.h47.cn/ | 开发文档 | 程序 · 模板 |
INSTALL
四套程序都是这三步,只有目录名不同。
解压后整目录上传。放二级目录(如 /llseo/)或独立域名根目录都行,程序会自动识别部署前缀,不用改代码。
Linux:chmod -R 755 程序目录,程序要求的写入目录(app/、data/、storage/、config/、uploads/、cache/)必要时给到 775。Windows / phpStudy 跳过这一步。
打开站点首页(或直接访问 /install/index.php)就是安装向导:环境自检 → 数据库配置(库不存在会自动建)→ 管理员账号 → 建表与初始数据。装完把 install/ 目录删掉,并确认生成了 install.lock。
config.php / db.local.php 提交到公开仓库,也别把带配置的目录直接发给别人。| 程序 | 更新包目录 | 模板 / 插件 | 程序后台怎么用 |
|---|---|---|---|
| laolicms | uploads/cms/ | 模板 · 插件 | 后台「内容商店」在线列表 + 「授权信息」联网激活 + 一键升级 |
| SEO工具 | uploads/seo/ | 模板 · 插件 | 后台「商店与更新」:拉最新包、装模板、查授权 |
| 工具箱 | uploads/tool/ | 模板 · 插件 | 后台「商店与更新」:拉最新包、装模板、查授权 |
| 壁纸系统 | uploads/bizhi/ | 模板 · 插件 | 后台「商店与更新」:拉最新包、装模板、查授权 |
REWRITE
不配伪静态程序也能跑(用兼容模式地址),但拿不到好看的 URL。下面这些规则和包内自带的规则文件一致,可以直接照抄:SEO 工具、laolicms、壁纸系统三套的根目录已经放好了 .htaccess(Apache)、nginx.htaccess / nginx.baota.conf(Nginx,按面板二选一)、web.config(IIS,壁纸系统),整目录上传就生效。工具箱按惯例不在根目录塞规则文件,README.md 第 4 节里 Apache / Nginx / IIS / 宝塔各有一段可以整块复制的写法。
Options -Indexes
DirectoryIndex index.php index.html
RewriteEngine On
RewriteRule ^(app|data)(/|$) - [F,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]
# 另含敏感后缀拒绝、隐藏文件拒绝、安全头、静态缓存与 gzip# nginx.htaccess —— phpStudy:include 进 location / 内部
try_files $uri $uri/ /index.php?$query_string;
location ~ ^/(app|data)(/|$) { return 404; }
location ~* \.(sqlite|db|log|ini|conf|lock|swp|htaccess)$ { return 404; }
location ~ /\. { deny all; return 404; }
# nginx.baota.conf —— 宝塔「伪静态」框:^~ 前缀版,整段粘进去
# nginx.conf —— 自建 Nginx:完整 server 块参考,拦截写在 \.php 之前Options -Indexes
AcceptPathInfo On
DirectoryIndex index.php index.html
RewriteEngine On
RewriteRule ^(app|storage)(/|$) - [F,L]
RewriteRule \.(sql|log|lock|bak|ini|conf|zip|tar|gz|7z|rar)$ - [F,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
# PATH_INFO 模式:/t/base64 交给 index.php 解析
RewriteRule ^(.*)$ index.php/$1 [L]# 第一步:宝塔「伪静态」框
location ~ ^/(app|storage)/ { return 404; }
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php$1 last;
}
# 第二步:把面板的 PHP 段换成带 PATH_INFO 的版本,
# 宝塔默认只有 location ~ \.php$,/t/base64 这类地址会 404Options -Indexes
DirectoryIndex index.php
RewriteEngine On
# 装完出现 install.lock 就关掉 /install/,防止重跑覆盖配置
RewriteCond %{DOCUMENT_ROOT}/application/install.lock -f
RewriteRule ^install(/|$) - [F,L]
# 内核、配置、缓存与模板里的 .php 一律拒绝
RewriteRule ^application/(config\.php|install\.lock|inc|cache|template/.+\.php) - [F,L]
# 商店包、更新包、覆盖前的备份只给后台程序读
RewriteRule ^uploads/(store|update|backup)/ - [F,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^ index.php [L]
# 另含 gzip 与静态资源缓存# nginx.htaccess —— phpStudy:include 进 location / 内部
try_files $uri $uri/ /index.php?$query_string;
location ~ ^/application/(inc|cache)(/|$) { return 404; }
location ~ ^/application/template/.+\.php$ { return 404; }
location ~ ^/uploads/(store|update|backup)(/|$) { return 404; }
# nginx.baota.conf —— 宝塔「伪静态」框:同一套规则换成 ^~ 前缀写法。
# 面板的 include 在 server{} 层级,只有 ^~ 才抢得过站点的 \.php 正则段
# 两个文件另含历史目录、数据与日志后缀、隐藏文件的拒绝规则,内容以包内文件为准Options -Indexes +FollowSymLinks
DirectoryIndex index.php index.html
RewriteEngine On
# 程序内部目录一律拒绝(纵深防御,正常请求走不到这里)
RewriteRule ^(app|config|storage|database|templates)(/|$) - [F]
RewriteRule ^install/.+\. - [F]
# 已经在 public/ 内的请求不再转发,避免 20 次重定向变成 500
RewriteRule ^public/ - [L]
# 转发后确实是文件/目录的直出(uploads/ 图片、模板静态资源)
RewriteCond %{DOCUMENT_ROOT}/public/$1 -f
RewriteRule ^(.*)$ public/$1 [L]
# 其余全部交给唯一入口,由路由解析 /list /w/123 /user/…
RewriteRule ^(.*)$ public/index.php [L,QSA]# nginx.htaccess —— include 在 server{ } 层级,与 location 同级
if ($uri ~ (^|/)(app|config|database|storage|templates)(/|$)) { return 404; }
location ~ ^/tpl/ { rewrite ^ /public/index.php last; }
location ~* ^/uploads/ { rewrite ^/uploads/(.*)$ /public/uploads/$1 last; }
location / {
rewrite ^/(?!(?:public|tpl)/)(.*)$ /public/$1 last;
try_files $uri $uri/ /public/index.php$is_args$args;
}
# 这个片段自带 location /,include 进 location / 里面会报 duplicate location "/"
# PHP 段第一行还要加入口白名单,否则残留的 .php 会被执行:
# if ($request_filename !~* /public/index\.php$) { return 404; }
# IIS 装好 URL Rewrite 模块后,包内 web.config 自动生效location / { } 内部,所以用 nginx.htaccess 这种「指令 + 嵌套 location」的片段;宝塔的框在 server{ } 层级,必须用 ^~ 前缀写法才抢得过站点自己的 location ~ \.php$,把带 location / 的片段 include 进 location / 会报 duplicate location "/"。nginx -t 校验,再 nginx -s reload 生效。nginx -s reopen 只是重新打开日志文件,配置根本没换,很多人以为规则没生效其实是敲了这条;宝塔面板里点「保存」会自动 reload。TROUBLE
pdo_mysql。先在面板里把 display_errors 打开看一眼报错,或者把 storage/logs、data/log 里的最后一条错误发给老李。install.lock 或 config.php。确实要重装就删掉锁文件(SEO 工具是 data/lock,工具箱是 app/data/install.lock),注意重装会清掉原数据。chmod -R 775 目录,属主要和 PHP 运行用户一致(www 或 www-data)。宝塔面板可以在「网站设置」里改权限。AllowOverride All 与 mod_rewrite;Nginx 检查 try_files 那一段有没有粘进 server 块,粘完要 reload。public/),其它三套直接指向程序目录即可。curl 或 allow_url_fopen 是否可用,以及服务器到目标接口的连通性。工具箱那 60 款是纯本地计算,不依赖网络。