织梦apache伪静态配置代码
部分服务器仍使用 Apache(如虚拟主机、LAMP 一键包),织梦在 Apache 下做伪静态通过 .htaccess 配置 mod_rewrite 实现。本文给出可直接复制使用的完整规则与排错方法。
一、开启 mod_rewrite 模块
宝塔 Apache:软件商店 → Apache → 设置 → 模块,确认 mod_rewrite 已启用。命令行:
# 查看已加载模块
apachectl -M | grep rewrite
# 若未加载,编辑 httpd.conf 取消注释
LoadModule rewrite_module modules/mod_rewrite.so
同时确保站点目录 AllowOverride All,否则 .htaccess 不生效:
<Directory "/www/wwwroot/yourdomain.com">
AllowOverride All
Require all granted
</Directory>
二、.htaccess 完整规则
在站点根目录创建 .htaccess:
RewriteEngine On
RewriteBase /
# 防止直接访问 PHP 重复
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
# 首页
RewriteRule ^index\.html$ /index.php [L]
# 列表页:/news/ 或 /news/list_5_2.html
RewriteRule ^([a-z0-9_-]+)/?$ /plus/list.php?dirname=$1 [L]
RewriteRule ^([a-z0-9_-]+)/list_([0-9]+)_([0-9]+)\.html$ /plus/list.php?tid=$2&PageNo=$3 [L]
# 文章页:/news/123.html
RewriteRule ^([a-z0-9_-]+)/([0-9]+)\.html$ /plus/view.php?aid=$2 [L]
# TAG 页:/tags/abc.html
RewriteRule ^tags/([^/]+)\.html$ /plus/tag.php?/$1 [L]
RewriteRule ^tags/([^/]+)/([0-9]+)\.html$ /plus/tag.php?/$1/$2 [L]
# 搜索页:/search/关键词.html
RewriteRule ^search/(.+)\.html$ /plus/search.php?q=$1 [L]
# 默认 404
ErrorDocument 404 /404.html
三、规则详解
1. RewriteCond 跳过已存在文件
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
这条让真实存在的图片、CSS、JS 文件直接返回,不被重写到 PHP,避免静态资源也走动态解析。
2. 列表页 dirname 适配
Apache 版本用 dirname 传目录名,需要在织梦 /plus/list.php 开头加一段把目录名转成 typeid 的逻辑:
if(isset($dirname) && !is_numeric($dirname)){
$row=$dsql->GetOne("SELECT id FROM dede_arctype WHERE typedir LIKE '%/$dirname'");
if($row) $tid=$row['id'];
}
3. 中文 tag 兼容
Apache 默认会对中文 URL 编码,$1 拿到的是百分号编码字符串,需要在 tag.php 里 urldecode:
$tag=urldecode(isset($tag) ? $tag : '');
四、后台对应设置
后台 系统 - 系统基本参数 - 核心设置:
- “是否使用伪静态”:是
- “栏目链接使用目录名”:是
- “文档链接使用 .html 后缀”:是
核心设置里还要把 cfg_rewrite_dirname 设为 y,让织梦生成的列表页 URL 用目录名而不是 typeid。
五、验证与排错
- 访问
/news/123.html,应返回文章页; - 若返回 404,检查
AllowOverride是否为 All; - 若返回 500,查看
/www/server/apache/logs/error_log,多为规则语法错误; - 若静态图片 404,是 RewriteCond 跳过规则没生效,检查文件路径。
Apache 的 rewrite 规则大小写敏感,
RewriteRule 不能写成 rewriterule,目录名正则建议加 NC 标志忽略大小写。六、Apache 与 Nginx 规则差异
| 项 | Apache (.htaccess) | Nginx |
|---|---|---|
| 语法 | RewriteRule + 正则 | rewrite + 正则 |
| 标志 | [L] [R=301] [NC] | last redirect permanent |
| 性能 | 每请求读 .htaccess 较慢 | 配置预编译更快 |
七、注意事项
- 切换伪静态后旧静态文件要 301 到新 URL,避免收录断崖;
- .htaccess 文件权限 644,过大或权限错误会导致 Apache 报 500;
- 虚拟主机若不允 AllowOverride,需联系空间商改服务器配置;
- 规则改完务必刷新浏览器缓存,否则看到的还是旧 URL。
Apache 伪静态规则相对直观,但性能不如 Nginx,若站点流量增长建议尽早迁移到 Nginx。在切换前后用百度搜索资源平台的“URL 提交”和“抓取诊断”验证新 URL 是否能被正常抓取,确保改造期间收录不出现大幅波动。