安装环境检测不通过——伪静态规则没写对,DedeCMS直接给你“红叉”
报错现象:
进入/install/index.php环境检测页,提示“Apache Rewrite模块:未开启”或“伪静态规则检测失败”,明明服务器已经装了mod_rewrite,但织梦就是不认。
原因分析:
织梦安装时不仅检测mod_rewrite是否加载,还会尝试读取.htaccess或httpd.conf中的AllowOverride设置,如果AllowOverride None,即使模块加载了,伪静态检测依然不过,部分集成环境(如phpstudy)默认没开rewrite模块。
解决步骤:
织梦CMS伪静态后排名问题,老运维的排查与实战修复手记
- 打开
httpd.conf,找到LoadModule rewrite_module modules/mod_rewrite.so,去掉前面的。 - 找到网站根目录的
<Directory>段,把AllowOverride None改为AllowOverride All。 - 重启Apache或Nginx(Nginx需检查
nginx.conf中是否包含try_files或rewrite规则)。 - 如果是虚拟主机,联系空间商开启伪静态支持,并确认
.htaccess文件已上传。 - 重新进入安装页,环境检测通过后再进行下一步。
后台登录异常——伪静态后session丢失,登录跳回首页
报错现象:
输入用户名密码后,页面刷新一下又回到登录页,没有任何报错,但就是进不去后台。
原因分析:
织梦伪静态后,如果后台地址被强制重写为/admin/之类,而登录提交的action路径被伪静态规则错误匹配,导致session无法正常写入或cookie路径不对,常见于把/dede/目录改成自定义名后,伪静态规则没有排除后台目录。
解决步骤:
- 在伪静态规则中,把后台目录(如
/dede/或自定义名)排除,不要对它做重写,例如Apache下在.htaccess中加RewriteCond %{REQUEST_URI} !^/dede/。 - 检查
/data/sessions/目录权限,确保可写(755或777)。 - 清理
/data/sessions/下所有旧session文件。 - 检查
/data/common.inc.php中$cfg_cookie_path是否为,如果不是改为。 - 若使用Nginx,在伪静态规则中单独为后台目录加
location /dede/ { try_files $uri $uri/ /dede/index.php?$args; }。
页面空白或乱码——伪静态后PHP报错被隐藏,编码冲突
报错现象:
前台栏目页或文章页打开全白,或者出现“锟斤拷”等乱码,后台正常。
原因分析:
伪静态重写后,请求被转到index.php,但PHP的display_errors被关闭,实际有致命错误没显示,乱码则是因为伪静态规则把GBK编码的URL参数错误解码,或者数据库连接时字符集没设对。
解决步骤:
- 临时在
index.php顶部加ini_set('display_errors', 1); error_reporting(E_ALL);,查看真实报错。 - 若报“Cannot modify header information”,检查
/include/common.inc.php是否有BOM头,用Notepad++转为“UTF-8无BOM”。 - 乱码问题:在
/data/common.inc.php中确认$cfg_db_language为gbk或utf8,与数据库一致。 - 伪静态规则中不要对中文标题做
urlencode二次编码,保持原始参数传递。 - 清理
/data/tplcache/和/data/cache/下的缓存文件。
模板标签调用无效——伪静态后{dede:arclist}不解析
报错现象:
模板里写了{dede:arclist typeid='1' row='10'},前台直接输出这段代码,没有变成文章列表。
原因分析:
织梦伪静态后,如果直接访问.html静态页,系统不会执行PHP解析标签;只有动态或伪静态请求才会解析,伪静态规则把.html请求直接指向了已生成的静态文件,而静态文件里标签未被替换。
解决步骤:
- 确认你访问的是伪静态URL(如
/list-1-1.html实际由PHP处理),而不是物理存在的/list-1-1.html文件。 - 删除
/html/或根目录下对应的静态文件,让伪静态规则生效。 - 在后台“系统-系统基本参数-核心设置”中,把“是否使用伪静态”设为“是”。
- 重新生成栏目和文章,但注意:伪静态模式下不要生成纯静态,否则标签不会动态解析。
- 若标签仍不解析,检查
/include/taglib/下对应标签文件是否完整,推荐从官方包重新覆盖。
生成静态页报错——伪静态与静态生成冲突
报错现象:
后台“生成-更新HTML”时提示“无法写入文件”或“DedeTag Engine Create File False”。
原因分析:
伪静态开启后,织梦默认把静态文件生成到根目录或/html/,但伪静态规则又把这些目录重写到了index.php,导致生成时路径判断混乱,目录权限不足也会报错。
解决步骤:
- 后台“系统-系统基本参数-性能设置”中,确认“静态文件目录”与伪静态规则不冲突。
- 给生成目录(如
/html/、/a/)设置755权限,所有者与PHP进程一致。 - 若使用Nginx,在伪静态规则最前面加
location ~ ^/html/ { break; },避免重写。 - 清理
/data/cache/下的inc_catalog_*.php等缓存。 - 重新生成,若仍报错,临时关闭伪静态,生成完再开启。
数据库连接失败——伪静态后配置文件路径错乱
报错现象:
前台提示“Access denied for user”或“Unknown database”,但后台能正常连接。
原因分析:
伪静态重写后,某些请求被转到子目录下的index.php,而该文件引用的common.inc.php路径不对,导致读取了错误的数据库配置,常见于把织梦装在子目录却用根目录伪静态规则。
解决步骤:
- 检查
/data/common.inc.php中$cfg_dbhost、$cfg_dbname、$cfg_dbuser、$cfg_dbpwd是否正确。 - 在伪静态规则中,确保子目录请求不会被重写到根目录的
index.php。 - 如果使用
include/common.inc.php相对路径,改为dirname(__FILE__).'/data/common.inc.php'绝对路径。 - 重启MySQL,确认数据库用户有远程或本地权限。
- 若仍失败,在
common.inc.php中临时加echo $cfg_dbname; exit;排查是否读到了错误配置。
最后一句老运维的忠告: 伪静态不是万能药,织梦的排名问题往往不在伪静态本身,而在伪静态之后你有没有把动态解析、缓存、权限、规则冲突这四件事理顺,按上面六步走一遍,90%的排名波动都能稳住。



发表评论