织梦5.7伪静态规则如何配置生效?

99ANYc3cd6
预计阅读时长 23 分钟
位置: 首页 织梦建站 正文

准备工作:开启伪静态功能

在配置服务器规则之前,请务必先在织梦DedeCMS后台开启伪静态功能。

织梦5.7 伪静态规则
(图片来源网络,侵删)
  1. 登录您的织梦DedeCMS后台。
  2. 进入 “系统” -> “系统基本参数”
  3. 在左侧菜单选择 “核心设置”
  4. 找到 “是否使用伪静态” 选项,将其设置为 “是”
  5. 点击 “确定” 保存设置。

针对不同服务器的伪静态规则

Apache 服务器 (.htaccess)

这是最常见的虚拟主机环境,织梦默认的安装包中就包含了一个 htaccess.txt 文件,您只需要将其重命名为 .htaccess 并上传到网站根目录即可。

操作步骤:

  1. 在您的网站根目录下,找到 htaccess.txt 文件。
  2. 将其重命名为 .htaccess
  3. 确保 .htaccess 文件中包含以下规则(如果您的规则不完整或丢失,可以用下面的内容覆盖):
# 织梦DedeCMS 5.7 伪静态规则 (Apache)
# 如果目录存在文件,直接访问文件
RewriteCond %{REQUEST_FILENAME} !-f
# 如果目录存在目录,直接访问目录
RewriteCond %{REQUEST_FILENAME} !-d
# 如果文件或目录不存在,则进行伪静态重写
RewriteRule ^(.*)$ /index\.php [L]
# 针对栏目、文章、列表等具体规则(如果上面的通用规则不生效,可以尝试下面的详细规则)
# RewriteRule ^index\.html$ /index.php [L]
# RewriteRule ^list-([0-9]+)\.html$ /plus/list.php?tid=$1 [L]
# RewriteRule ^list-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /plus/list.php?tid=$1&totalresult=$2&PageNo=$3 [L]
# RewriteRule ^view-([0-9]+)-([0-9]+)\.html$ /plus/view.php?arcID=$1&pageno=$2 [L]
# RewriteRule ^category/([a-zA-Z0-9_-]+)/?$ /plus/list.php?tid=$1 [L]
# RewriteRule ^archives/([a-zA-Z0-9_-]+)/([0-9]+)/?$ /plus/view.php?arcID=$2 [L]
# RewriteRule ^archives/([a-zA-Z0-9_-]+)/?$ /plus/list.php?tid=$1 [L]
# RewriteRule ^tags/([a-zA-Z0-9_-]+)/?$ /tags.php?/$1/ [L]
# RewriteRule ^tags/([a-zA-Z0-9_-]+)/([0-9]+)/?$ /tags.php?/$1/$2/ [L]
# RewriteRule ^tag/([a-zA-Z0-9_-]+)/?$ /tags.php?/$1/ [L]
# RewriteRule ^tag/([a-zA-Z0-9_-]+)/([0-9]+)/?$ /tags.php?/$1/$2/ [L]

说明:

  • 上面第一段规则是一个通用的规则,适用于大多数情况,它会将所有不存在的请求都指向 index.php
  • 第二段是更详细的规则,分别对应栏目列表、文章内容页、标签页等,如果通用规则导致某些页面404,可以尝试使用详细规则。
  • 重要提示:部分主机商可能不允许在 .htaccess 中使用 RewriteEngine On,但通常包含在 htaccess.txt 中,如果您的规则不生效,请检查文件开头是否有 RewriteEngine On 这一行,如果没有,请手动添加。

Nginx 服务器

Nginx的规则需要配置在服务器的配置文件中,通常是 nginx.conf 或您对应站点的配置文件(如 yourdomain.com.conf)。

织梦5.7 伪静态规则
(图片来源网络,侵删)

操作步骤:

  1. 登录您的服务器,找到Nginx的配置文件。
  2. 在您网站的 server 配置块中,添加如下 rewrite 规则。
  3. 修改后,需要 重启Nginx服务 使配置生效。

Nginx 配置规则:

# 织梦DedeCMS 5.7 伪静态规则 (Nginx)
# 将此段代码放入 server { ... } 块内
location / {
    # 如果请求的文件或目录不存在,则进行重写
    if (!-e $request_filename) {
        rewrite "^/index\.html$" /index.php last;
        rewrite "^/list-([0-9]+)\.html$" /plus/list.php?tid=$1 last;
        rewrite "^/list-([0-9]+)-([0-9]+)-([0-9]+)\.html$" /plus/list.php?tid=$1&totalresult=$2&PageNo=$3 last;
        rewrite "^/view-([0-9]+)-([0-9]+)\.html$" /plus/view.php?arcID=$1&pageno=$2 last;
        # 更多规则...
        rewrite "^/category/([a-zA-Z0-9_-]+)/?$ /plus/list.php?tid=$1 last;
        rewrite "^/archives/([a-zA-Z0-9_-]+)/([0-9]+)/?$ /plus/view.php?arcID=$2 last;
        rewrite "^/archives/([a-zA-Z0-9_-]+)/?$ /plus/list.php?tid=$1 last;
        rewrite "^/tags/([a-zA-Z0-9_-]+)/?$ /tags.php?/$1/ last;
        rewrite "^/tags/([a-zA-Z0-9_-]+)/([0-9]+)/?$ /tags.php?/$1/$2/ last;
        # 通用规则,放在最后,作为兜底
        rewrite "^(.*)$" /index.php last;
    }
}

说明:

  • Nginx的规则通常需要更精确地匹配,避免错误重写。
  • last 标志表示在本 location 中完成重写,并重新开始新一轮的 location 匹配。
  • break 标志表示在本 location 中完成重写,不再进行后续的匹配。
  • 对于通用规则,使用 rewrite "^(.*)$" /index.php last; 可以处理大部分情况。

IIS 服务器 (web.config)

IIS 7.0 及更高版本使用 web.config 文件,您需要在网站根目录创建或修改这个文件。

操作步骤:

  1. 在网站根目录下创建一个名为 web.config 的文件。
  2. 复制到该文件中。
  3. 保存文件,IIS会自动读取和应用这些规则。

web.config 配置规则:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <!-- 通用规则 -->
                <rule name="DedeCMS Rewrite" stopProcessing="true">
                    <match url="^(.*)$" ignoreCase="false" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="index.php/{R:1}" appendQueryString="true" />
                </rule>
                <!-- 详细规则 (如果通用规则不生效,可以尝试启用这些) -->
                <!--
                <rule name="DedeCMS List" stopProcessing="true">
                    <match url="^list-([0-9]+)\.html$" />
                    <action type="Rewrite" url="plus/list.php?tid={R:1}" />
                </rule>
                <rule name="DedeCMS View" stopProcessing="true">
                    <match url="^view-([0-9]+)-([0-9]+)\.html$" />
                    <action type="Rewrite" url="plus/view.php?arcID={R:1}&pageno={R:2}" />
                </rule>
                -->
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

说明:

  • stopProcessing="true" 表示匹配到此规则后,就停止处理后续规则。
  • negate="true" 表示对条件取反。
  • appendQueryString="true" 表示保留原始URL中的查询字符串。
  • IIS的伪静态有时需要安装 URL Rewrite 模块,如果您的服务器上没有此模块,请先安装。

常见问题与解决方法

  1. 配置后网站首页可以打开,但栏目页、文章页等打开是404错误。

    • 原因:服务器规则未生效或规则不正确。
    • 解决
      • 检查规则:确认您使用的规则与您的服务器环境(Apache/Nginx/IIS)完全匹配。
      • 检查文件名:Apache 确保文件是 .htaccess 而不是 htaccess.txt,Nginx 确保规则在正确的 server 块中。
      • 检查权限:确保 .htaccess (Apache) 或 web.config (IIS) 文件在网站根目录,并且有读取权限。
      • 重启服务:Nginx 和 IIS 修改配置后必须重启服务才能生效,Apache 有时也需要重启或刷新配置。
  2. 后台的“生成HTML”功能中的“选择目录默认页HTML”选项变成了灰色,无法勾选。

    • 原因:这是织梦DedeCMS的一个特性,当您开启伪静态后,首页本身就是由 index.php 动态生成的,所以不再需要生成一个静态的 index.html 文件。
    • 解决:这是正常现象,无需处理,您的首页会通过伪静态规则正常访问。
  3. 规则生效后,网站地图无法生成或访问。

    • 原因:网站的地图(如 sitemap.xml)是真实存在的文件,伪静态规则可能会错误地将其重定向到 index.php
    • 解决:需要在伪静态规则中加入排除项,在 Apache 的 .htaccess 文件开头添加:
      RewriteCond %{REQUEST_URI} !^/sitemap\.xml [NC]
      RewriteCond %{REQUEST_URI} !^/sitemap\.html [NC]

      然后再跟原来的 RewriteRule,Nginx 和 IIS 也需要做类似的排除处理。

服务器环境 配置文件 核心操作
Apache .htaccess htaccess.txt 重命名为 .htaccess 并上传到根目录。
Nginx nginx.conf (站点配置文件) server 块中添加 rewrite 规则,并重启Nginx。
IIS web.config 在网站根目录创建或修改 web.config 文件。

请根据您的实际服务器环境选择对应的规则进行配置,如果遇到问题,请仔细检查每一步的细节,特别是文件名、路径和服务器重启操作。

-- 展开阅读全文 --
头像
织梦CMS如何调用栏目名称?
« 上一篇 02-15
C程序设计语言(第四版)有哪些核心更新?
下一篇 » 02-15

相关文章

取消
微信二维码
支付宝二维码

目录[+]