默认情况下,织梦的Tag链接是 tags.php?/标签名/ 这样的形式,包含英文问号和斜杠,不够美观,也不利于SEO,将其修改为 tags/标签名.html 或 tag/标签名.html 这样的形式,是很多网站优化的需求。
实现这个功能主要分为两个步骤:
- 修改文件:修改核心文件,让程序能识别新的URL格式。
- 配置服务器:配置服务器(如Apache或Nginx),将新URL重写(Rewrite)到真实的
tags.php。
第一步:修改织梦核心文件
我们需要修改两个文件,让织梦在生成和识别Tag链接时使用新的格式。
修改 include/helpers/tag.helper.php 文件
这个文件是专门用来处理Tag链接生成的,我们需要找到其中生成URL的代码段并替换它。
操作步骤:
-
使用FTP或文件管理器,登录你的网站服务器。
-
找到并下载
/include/helpers/tag.helper.php文件。 -
用代码编辑器(如VS Code, Sublime Text, Notepad++)打开它。
-
按快捷键
Ctrl + F搜索tags.php?。 -
你会找到类似下面这样的代码(可能因织梦版本略有不同):
// 在文件中找到这一行或类似的代码 $tagsUrl = $cfg_cmsurl."/tags.php?/".$row['tagname'];
-
将这行代码替换为:
// 新的URL格式,/tags/标签名.html $tagsUrl = $cfg_cmsurl."/tags/".$row['tagname'].".html";
注意:
$cfg_cmsurl是你的网站根目录地址,https://www.yourdomain.com。- 我这里使用了
/tags/作为路径,你也可以改成/tag/或其他你喜欢的,但必须与后面Nginx/Apache的 Rewrite 规则保持一致。 - 修改后,织梦在生成所有Tag链接时,都会使用这个新的格式。
-
保存并上传覆盖原文件。
修改 tags.php 文件
这个文件是Tag页面的真实入口,我们需要修改它,让它能够正确解析类似 tags/标签名.html 这样的URL,并从中提取出“标签名”。
操作步骤:
-
下载你的网站根目录下的
tags.php文件。 -
用代码编辑器打开它。
-
找到获取标签名的代码,通常在文件的开头部分,类似这样:
// 在文件中找到这一行或类似的代码 $tag = isset($tag) ? trim($tag) : ''; // 或者可能是 $tag = FilterSearch(urldecode($tag));
-
将其修改为:
// 新的代码,用于从 /tags/标签名.html 中提取标签名 if (isset($_SERVER['PATH_INFO'])) { // PATH_INFO 会是 /标签名.html 这样的格式 $path_info = trim($_SERVER['PATH_INFO'], '/'); // 确保它以 .html 并且不是 tags.php 本身 if (substr($path_info, -5) == '.html' && $path_info != 'tags.php') { // 移除 .html 后缀,得到纯标签名 $tag = substr($path_info, 0, -5); } else { $tag = ''; } } else { $tag = ''; } // 对标签名进行必要的过滤,防止注入 $tag = FilterSearch(urldecode($tag));代码解释:
$_SERVER['PATH_INFO']是一个PHP超全局变量,当URL是https://www.yourdomain.com/tags/标签名.html时,它的值就是'/标签名.html'。- 我们通过
trim()去掉两端的斜杠,用substr()截取掉末尾的.html,从而得到干净的“标签名”。 FilterSearch()和urldecode()是织梦原有的安全过滤函数,确保标签名安全。
-
保存并上传覆盖原文件。
第二步:配置服务器伪静态规则
修改完文件后,服务器还不知道如何处理 tags/标签名.html 这样的请求,我们需要告诉服务器,当遇到这种请求时,把它 internally 转发给 tags.php 文件去处理。
请根据你的服务器类型选择对应的配置方法。
如果你的服务器是 Nginx
-
找到你的Nginx配置文件,通常是
nginx.conf或者你网站配置文件(在sites-available或vhost目录下)。 -
在
server { ... }块内,添加或修改rewrite规则。# 在 server { ... } 块内添加如下规则 location /tags/ { # 如果请求的是一个文件或目录,并且真实存在,则直接访问,不重写 if (-f $request_filename) { break; } # 将 /tags/任意内容.html 的请求重写到 tags.php rewrite "^/tags/(.+)\.html$" /tags.php?/$1 last; }规则解释:
location /tags/ { ... }:匹配所有以/tags/开头的请求。rewrite "^/tags/(.+)\.html$" /tags.php?/$1 last;:这是核心。^/tags/(.+)\.html$:是一个正则表达式,匹配/tags/后面跟着任意字符(),最后以.html结尾的URL。/tags.php?/$1:将匹配到的URL重写到tags.php。$1是正则表达式中第一个括号 捕获到的内容,也就是你的“标签名”,注意这里我们加回了 ,是因为tags.php内部代码在处理时,可能期望这种格式(但我们第一步已经修改了它,所以这里其实也可以写成/tags.php/$1,为了兼容性,保留原样更稳妥)。last:表示停止当前层的rewrite检查,并搜索匹配的location。
-
保存Nginx配置文件,然后执行
nginx -t检查配置是否正确,最后执行nginx -s reload重新加载配置。
如果你的服务器是 Apache
-
确保你的Apache服务器开启了
mod_rewrite模块,通常虚拟主机商会默认开启。 -
在你的网站根目录下,找到或创建一个名为
.htaccess的文件。 -
在文件中添加或修改以下规则:
# 将RewriteEngine打开 RewriteEngine On # 如果请求的文件或目录真实存在,则不进行重写 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 核心重写规则 RewriteRule ^tags/(.*)\.html$ tags.php?/$1 [L]规则解释:
RewriteEngine On:开启URL重写引擎。RewriteCond ...:是重写条件,确保只有当请求的文件或目录不存在时才进行重写,避免影响真实存在的文件(如图片、CSS、JS)。RewriteRule ^tags/(.*)\.html$ tags.php?/$1 [L]:核心重写规则。^tags/(.*)\.html$:正则表达式,匹配tags/后面任意字符(),并以.html结尾的URL。tags.php?/$1:重写目标。$1代表第一个括号 捕获到的内容(即标签名)。[L]:表示这是最后一条规则,匹配到后就停止。
-
保存
.htaccess文件即可,Apache通常会自动检测并应用。
第三步:验证和测试
完成以上所有步骤后:
- 清除缓存:登录织梦后台,【系统】->【清除缓存】,确保新的URL规则被正确应用。
- 前台测试:
- 访问任何一个Tag页面,观察浏览器地址栏是否已经变成了
https://www.yourdomain.com/tags/标签名.html的格式。 - 点击Tag链接,确认是否能正常跳转并显示对应的文章列表。
- 检查页面中的分页链接,确保它们也遵循了新的URL格式。
- 访问任何一个Tag页面,观察浏览器地址栏是否已经变成了
如果一切正常,恭喜你,你已经成功地为织梦Tag设置了中文URL!
常见问题排查
- 404错误:最常见的原因是服务器伪静态规则没有配置正确或没有生效,请仔细检查Nginx或Apache的配置,并确保已经重载了服务配置。
- 页面打不开或内容错乱:可能是
tags.php文件的修改有误,导致无法正确获取标签名,请检查第一步中的代码修改是否正确。 - URL还是旧格式:可能是缓存问题,请务必清除织梦缓存和浏览器缓存后重试,也可能是
tag.helper.php文件没有被正确修改。
