赞片CMS.htaccess

chinaz
chinaz 正式会员超兽战士
发布于 2026-10-07 03:44 ·3 浏览 ·0 回复

照着这篇把赞片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,别靠猜。
版权声明:本文来自 GJ论坛《赞片CMS.htaccess》
原文链接:https://www.gj0.com/thread-48.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。

全部回复 0

还没有回复,来抢沙发~