赞片CMS.htaccess
照着这篇把赞片CMS 的 .htaccess 配好,你就能让网站跑上伪静态、去掉 URL 里的 index.php,同时堵住上传目录执行 PHP 这类常见漏洞。
第一步:确认 Apache 加载了 mod_rewrite
这一步是检查服务器有没有开启重写模块,没开的话 .htaccess 写得再对也不会生效。
- 宝塔面板:软件商店 → 已安装 → Apache → 设置 → 配置修改,找到
LoadModule rewrite_module modules/mod_rewrite.so,前面不能有#;再往下找<Directory>段,确认是AllowOverride All。 - 命令行验证:
httpd -M | grep rewrite,应输出rewrite_module (shared)。 - 改完重启:
systemctl restart httpd,或在宝塔面板点「重载配置」。
注意:AllowOverride 如果是 None,.htaccess 会被完全忽略,前台报 404 但日志里看不到任何 rewrite 记录,很容易误判成规则写错。
第二步:把 .htaccess 放到正确位置
这一步决定规则的作用范围。赞片CMS 的入口是站点根目录的 index.php,所以 .htaccess 要和 index.php、admin.php 放在同一层。
- 文件名就是
.htaccess,开头那个点不能少。Windows 记事本保存时,文件名要写成带引号的".htaccess",否则会变成.htaccess.txt。 - 编码存 UTF-8 无 BOM,换行用 LF。
- 权限设 644,属主和站点其他文件保持一致。
注意:用 FileZilla 上传时,默认不显示以点开头的文件,要在「服务器 → 强制显示隐藏文件」里打开,否则你以为传上去了其实服务器上根本没有。
第三步:写伪静态规则
这一步让 /play/123.html 这类地址能正常访问,同时去掉 URL 里的 index.php。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# 已存在的文件和目录直接放行
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^play/([0-9]+)\.html$ index.php?m=play&id=$1 [L,QSA]
RewriteRule ^list/([0-9]+)\.html$ index.php?m=list&id=$1 [L,QSA]
RewriteRule ^show/([0-9]+)\.html$ index.php?m=show&id=$1 [L,QSA]
# 兜底规则,必须放最后
RewriteRule ^(.*)$ index.php?/$1 [L,QSA]
</IfModule>
参数名请以你后台「伪静态」页面给出的规则为准——赞片CMS 后台一般会直接显示一段可复制的规则,优先用它的,兼容性最好。
注意:RewriteRule 从上到下依次匹配,兜底那条一旦放在前面,后面所有规则都走不到。
第四步:后台打开伪静态开关
这一步让 CMS 自己输出 .html 形式的链接,而不是带参数的动态地址。
- 登录后台,进入「系统 → 网站设置 → URL 设置」,部分版本叫「伪静态设置」或「SEO 设置」。
- 把「URL 模式」由「动态」改成「伪静态」,保存。
- 回前台刷新首页,看导航链接是否已变成
/list/1.html形式。
注意:改完要清一次缓存。赞片CMS 的模板缓存通常在
runtime/或data/cache/目录,也可以直接点后台「系统 → 缓存管理 → 清除缓存」。
第五步:安全加固
这一步在同一个 .htaccess 里追加几条规则,堵住最常见的几个洞。视频站被挂马,基本都出在上传目录被当成 PHP 执行。
Options -Indexes
<Files ~ "^\.ht">
Require all denied
</Files>
<FilesMatch "\.(sql|log|ini|bak|conf)$">
Require all denied
</FilesMatch>
Apache 2.4 用 Require all denied,2.2 用 Order allow,deny + Deny from all,写错版本会直接 500。
注意:
<Directory>指令不能写在 .htaccess 里,会报 500。要禁止上传目录执行 PHP,只能在uploads/目录下单独放一个 .htaccess,内容写php_flag engine off;或者把限制写进 Apache 主配置。
第六步:加缓存和压缩
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpeg "access plus 30 days"
ExpiresByType text/css "access plus 7 days"
ExpiresByType application/javascript "access plus 7 days"
</IfModule>
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/css application/javascript
</IfModule>
第七步:出错了怎么排查
- 先看 Apache 错误日志,宝塔在
/www/wwwlogs/下,找对应站点的 error_log。 - 报 500:多半是语法错误或用了不允许的指令,把新加的整块注释掉再逐条放开,二分定位。
- 报 404:检查 AllowOverride 是否 All;子目录部署时 RewriteBase 要写成
/子目录名/。
小结
- .htaccess 生效有两个前提:mod_rewrite 已加载、AllowOverride 设为 All。
- 文件放站点根目录,和 index.php 同级,UTF-8 无 BOM,644 权限。
- 伪静态规则优先用后台给出的,兜底 RewriteRule 必须放最后。
- 上传目录禁止执行 PHP 是必做项,且只能在该目录内单独建 .htaccess。
- 出问题先看 error_log,别靠猜。
原文链接:https://www.gj0.com/thread-48.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。