船说 CMSApache 伪静态怎么写
照着做完,你就能把船说 CMS 的 Apache 伪静态跑通,让文章页、栏目页从 index.php?c=xxx&id=1 变成 /xxx/1.html 这种形式。
第一步:确认 Apache 环境满足条件
这一步要确认 Apache 支持并启用了 URL 重写模块,否则 .htaccess 里写再多规则也不会生效。
先看版本和模块(Debian/Ubuntu 用 apache2,CentOS/宝塔用 httpd):
httpd -v
httpd -M | grep rewrite
如果没有任何输出,说明 mod_rewrite 没开。开启方法:
- Debian/Ubuntu:
sudo a2enmod rewrite && sudo systemctl restart apache2 - CentOS/宝塔面板:编辑
/etc/httpd/conf/httpd.conf,确认存在LoadModule rewrite_module modules/mod_rewrite.so,并去掉行首的#,然后sudo systemctl restart httpd
接着确认站点目录允许 .htaccess 生效。在虚拟主机配置里找到 <Directory /www/wwwroot/你的站点> 这一段,把:
AllowOverride None
改成:
AllowOverride All
改完必须重启 Apache。这一步做完,.htaccess 才真正起作用。
注意:宝塔面板的路子是「网站 → 设置 → 配置文件」,直接改里面的
AllowOverride,保存后面板会自动重启 Apache,比手动改系统配置更省事。
第二步:在船说 CMS 后台拿到官方规则
这一步要拿到船说 CMS 自家生成的重写规则,因为它和你的 URL 模式、栏目结构是绑定的,比自己猜规则靠谱得多。
登录后台,进入「系统」→「伪静态设置」(部分版本叫「URL 优化」或「SEO 设置」),把「伪静态」开关打开,URL 模式一般有「动态 / 伪静态 / 静态」三个选项,选伪静态。页面下方通常会显示一段以 RewriteEngine On 开头的代码,点「复制」把整段复制出来。
如果后台版本没有这段代码,就用下面第三步的通用规则兜底。
第三步:在网站根目录写 .htaccess
这一步要创建重写文件,把规则落到磁盘上。网站根目录指的是 index.php 所在的那一层。
cd /www/wwwroot/你的站点
vim .htaccess
把后台复制的规则粘贴进去。若是通用兜底,用这段(兼容 PATH_INFO 方式):
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L,QSA]
</IfModule>
保存后设置权限,避免 Apache 读不到:
chmod 644 .htaccess
如果你知道文章页的固定格式,可以再附加一条精准规则,例如把 /news/123.html 映射到文章详情:
RewriteRule ^news/([0-9]+)\.html$ index.php?c=article&id=$1 [L]
注意:
.htaccess必须保存为 UTF-8 无 BOM + Unix 换行(LF)。用 Windows 记事本保存成 CRLF 或带 BOM,会让 Apache 直接返回 500。FTP 上传时记得开启「显示隐藏文件」,否则文件名前的点会被吞掉,变成htaccess而不生效。
第四步:测试并排错
这一步要验证规则真的生效,而不是后台看着正常、前台还是动态链接。
浏览器直接访问一条伪静态地址,例如 http://你的域名/news/123.html。也可以用命令行更快确认状态码:
curl -I http://你的域名/news/123.html
返回 200 就通了;返回 404 说明规则没匹配上,检查 RewriteRule 的路径段是否和后台 URL 模式一致;返回 500 基本是文件编码或语法问题,去看 Apache 错误日志:
tail -f /www/wwwlogs/你的域名.error.log
改完规则后,去后台清一次缓存,再刷新前台,避免缓存里还是旧的动态链接。
注意:如果你的服务器跑的是 Nginx 而不是 Apache,
.htaccess完全无效,需要在站点的server {}里写location / { try_files $uri $uri/ /index.php?$query_string; },别在这条路上浪费时间。
小结
- 伪静态生效的三个前提:
mod_rewrite已加载、AllowOverride All、改完重启 Apache - 规则优先用船说 CMS 后台「伪静态设置」里生成的,别自己硬猜参数名
.htaccess放在index.php同级的网站根目录,权限 644,编码 UTF-8 无 BOM、换行为 LF- 排错顺序:404 查规则匹配,500 查文件编码和日志
- 服务器是 Nginx 时不要用
.htaccess,改写站点配置里的try_files
原文链接:https://www.gj0.com/thread-793.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。