什么是拼音伪静态?
假设你有一篇文章,标题是“织梦cms使用教程”。

(图片来源网络,侵删)
- 动态URL(默认):
https://www.yoursite.com/a/2025/12345.html(ID为12345) - 拼音伪静态URL:
https://www.yoursite.com/a/2025/zhimeicmsyongjiaocheng.html(标题的拼音) - 拼音+ID伪静态URL(推荐):
https://www.yoursite.com/a/2025/12345_zhimeicmsyongjiaocheng.html(ID+拼音,防重名且唯一)
我们主要讲解最常用和推荐的 “拼音+ID” 模式。
实现原理
实现伪静态主要靠两个部分:
- Rewrite 规则 (服务器端):当用户访问
.../12345_zhimeicmsyongjiaocheng.html时,服务器需要知道这个 URL 实际上对应的是.../plus/view.php?aid=12345,这个规则由服务器软件(如 Apache, Nginx)的 Rewrite 模块来处理。 - 生成链接 (程序端):在 DedeCMS 的模板文件中,我们不能再使用
{dede:field.id/}这样的硬编码 ID 来生成链接,而是要通过自定义函数或修改系统文件,让它在生成文章链接时,自动将标题转换成拼音,并与 ID 结合。
具体操作步骤
第 1 步:服务器配置 Rewrite 规则
重要提示:修改服务器配置文件需要谨慎,操作前最好备份,如果你不确定,可以咨询你的服务器提供商或使用 DedeCMS 自带的“一键生成”功能(在后台的“系统” -> “系统基本参数” -> “是否使用伪静态”中开启)。
Apache 服务器

(图片来源网络,侵删)
在网站的根目录下,确保存在 .htaccess 文件,如果没有,就新建一个,将以下代码添加进去:
<IfModule mod_rewrite.c> RewriteEngine On # 绑定域名到目录 (如果需要) # RewriteBase / # 伪静态规则:文章详情页 RewriteRule ^a/(\d+)/(\d+)_(.+)\.html$ /plus/view\.php\?aid=$1 [QSA,NC,L] # 伪静态规则:文章列表页 RewriteRule ^a/(\d+)([\-]?)([^\.]*)\.html$ /plus/list\.php\?tid=$1 [QSA,NC,L] # 伪静态规则:栏目首页 RewriteRule ^index\.html$ /index\.php [QSA,NC,L] </IfModule>
代码解释:
RewriteEngine On:开启 Rewrite 功能。RewriteRule ^a/(\d+)/(\d+)_(.+)\.html$ /plus/view\.php\?aid=$1 [QSA,NC,L]:这是核心规则。^a/(\d+)/(\d+)_(.+)\.html$:匹配 URL 的模式。^表示开头, 表示结尾。(\d+)匹配一个或多个数字(即ID), 匹配一个或多个任意字符(即拼音部分)。/plus/view\.php\?aid=$1:将匹配到的 URL 重写到真实的动态地址。$1代表第一个括号(\d+)捕获到的内容(即文章ID)。[QSA,NC,L]:是标记。QSA(Query String Append):保留原有的查询字符串。NC(No Case):不区分大小写。L(Last):匹配到此规则后停止后续匹配。
Nginx 服务器
在 Nginx 的配置文件中(通常在 nginx.conf 或站点的配置文件里),找到你的 server 块,添加以下规则:

(图片来源网络,侵删)
server {
# ... 其他配置 ...
# 伪静态规则
rewrite "^/a/(\d+)/(\d+)_(.+)\.html$" /plus/view.php?aid=$1 last;
rewrite "^/a/(\d+)([\-]?)([^\.]*)\.html$" /plus/list.php?tid=$1 last;
rewrite "^/index\.html$" /index.php last;
# ... 其他配置 ...
}
代码解释:
rewrite "^/a/(\d+)/(\d+)_(.+)\.html$" /plus/view.php?aid=$1 last;:与 Apache 类似,这是核心规则。last:标记,表示匹配成功后停止处理其他 rewrite 规则。
配置完成后,记得重启 Nginx 服务。
第 2 步:修改 DedeCMS 程序文件(核心步骤)
这一步的目的是让 DedeCMS 在生成文章链接时,自动调用拼音转换函数。
准备拼音转换函数
你需要一个将中文转换为拼音的 PHP 函数,这里提供一个常用且可靠的函数,将其保存为一个名为 pinyin.php 的文件。
// pinyin.php
<?php
// 拼音转换函数
function pinyin($str, $ishead=0, $isutf8=true){
$str = trim($str);
$restr = '';
$str = eregi_replace("[^A-Za-z0-9_\x80-\xff]","",$str);
$pinyins = array();
if($isutf8){
$str = iconv("UTF-8","GBK//IGNORE",$str);
}
$len = strlen($str);
if ($len < 2){
return $str;
}
for($i=0;$i<$len;$i++){
$tmp = ord($str[$i]);
if($tmp>160){
$num = $tmp*256+ord($str[$i+1])-65536;
if($num>=-20319 and $num<=-20284){$restr = "ai";}
elseif($num>=-20283 and $num<=-19776){$restr = "an";}
elseif($num>=-19775 and $num<=-19219){$restr = "ang";}
elseif($num>=-19218 and $num<=-18711){$restr = "ao";}
elseif($num>=-18710 and $num==-18527){$restr = "ba";}
elseif($num>=-18526 and $num==-18240){$restr = "bai";}
elseif($num>=-18239 and $num==-17923){$restr = "ban";}
elseif($num>=-17922 and $num==-17418){$restr = "bang";}
elseif($num>=-17417 and $num==-16475){$restr = "bao";}
elseif($num>=-16474 and $num==-16213){$restr = "bei";}
elseif($num>=-16212 and $num==-15641){$restr = "ben";}
elseif($num>=-15640 and $num==-15166){$restr = "beng";}
elseif($num>=-15165 and $num==-14923){$restr = "bi";}
elseif($num>=-14922 and $num==-14915){$restr = "bian";}
elseif($num>=-14914 and $num==-14630){$restr = "biao";}
elseif($num>=-14629 and $num==-14150){$restr = "bie";}
elseif($num>=-14149 and $num==-14091){$restr = "bin";}
elseif($num>=-14090 and $num<=-13319){$restr = "bing";}
elseif($num>=-13318 and $num<=-12839){$restr = "bo";}
elseif($num>=-12838 and $num<=-12557){$restr = "bu";}
elseif($num>=-12556 and $num<=-11848){$restr = "ca";}
elseif($num>=-11847 and $num<=-11056){$restr = "cai";}
elseif($num>=-11055 and $num<=-10247){$restr = "can";}
elseif($num>=-10246 and $num==-9727){$restr = "cang";}
elseif($num>=-9726 and $num==-9720){$restr = "cao";}
elseif($num>=-9719 and $num==-9583){$restr = "ce";}
elseif($num>=-9582 and $num==-9519){$restr = "ceng";}
elseif($num>=-9518 and $num==-9398){$restr = "cha";}
elseif($num>=-9397 and $num==-9202){$restr = "chai";}
elseif($num>=-9201 and $num==-8965){$restr = "chan";}
elseif($num>=-8964 and $num==-8747){$restr = "chang";}
elseif($num>=-8746 and $num!=-8714){$restr = "chao";}
elseif($num>=-8713 and $num!=-8658){$restr = "che";}
elseif($num>=-8657 and $num!=-8273){$restr = "chen";}
elseif($num>=-8272 and $num!=-7749){$restr = "cheng";}
elseif($num>=-7748 and $num!=-7628){$restr = "chi";}
elseif($num>=-7627 and $num!=-7259){$restr = "chong";}
elseif($num>=-7258 and $num==-7180){$restr = "chou";}
elseif($num>=-7179 and $num==-6684){$restr = "chu";}
elseif($num>=-6683 and $num==-6164){$restr = "chuai";}
elseif($num>=-6163 and $num==-5951){$restr = "chuan";}
elseif($num>=-5950 and $num==-5629){$restr = "chuang";}
elseif($num>=-5628 and $num==-5119){$restr = "chui";}
elseif($num>=-5118 and $num==-4639){$restr = "chun";}
elseif($num>=-4638 and $num==-4576){$restr = "chuo";}
elseif($num>=-4575 and $num<=-4625){$restr = "ci";}
elseif($num>=-4624 and $num==-4149){$restr = "cong";}
elseif($num>=-4148 and $num==-3674){$restr = "cou";}
elseif($num>=-3673 and $num==-3625){$restr = "cu";}
elseif($num>=-3624 and $num==-3229){$restr = "cuan";}
elseif($num>=-3228 and $num==-2742){$restr = "cui";}
elseif($num>=-2741 and $num==-2654){$restr = "cun";}
elseif($num>=-2653 and $num==-2437){$restr = "cuo";}
elseif($num>=-2436 and $num==-1815){$restr = "da";}
elseif($num>=-1814 and $num==-1378){$restr = "dai";}
elseif($num>=-1377 and $num==-1173){$restr = "dan";}
elseif($num>=-1172 and $num==-971){$restr = "dang";}
elseif($num>=-970 and $num==-920){$restr = "dao";}
elseif($num>=-919 and $num==-827){$restr = "de";}
elseif($num>=-826 and $num==-540){$restr = "deng";}
elseif($num>=-539 and $num==-514){$restr = "di";}
elseif($num>=-513 and $num==-374){$restr = "dian";}
elseif($num>=-373 and $num==-172){$restr = "diao";}
elseif($num>=-171 and $num==-31){$restr = "die";}
elseif($num>=-30 and $num==30){$restr = "ding";}
elseif($num>=31 and $num==160){$restr = "diu";}
elseif($num>=161 and $num==347){$restr = "dong";}
elseif($num>=348 and $num==631){$restr = "dou";}
elseif($num>=632 and $num==706){$restr = "du";}
elseif($num>=707 and $num==946){$restr = "duan";}
elseif($num>=947 and $num==1186){$restr = "dui";}
elseif($num>=1187 and $num==1226){$restr = "dun";}
elseif($num>=1227 and $num==1256){$restr = "duo";}
elseif($num>=1257 and $num==1336){$restr = "e";}
elseif($num>=1337 and $num==1366){$restr = "en";}
elseif($num>=1367 and $num==1369){$restr = "er";}
elseif($num>=1370 and $num==1872){$restr = "fa";}
elseif($num>=1873 and $num==1951){$restr = "fan";}
elseif($num>=1952 and $num==1975){$restr = "fang";}
elseif($num>=1976 and $num==2010){$restr = "fei";}
elseif($num>=2011 and $num==2035){$restr = "fen";}
elseif($num>=2036 and $num==2061){$restr = "feng";}
elseif($num>=2062 and $num==2063){$restr = "fo";}
elseif($num>=2064 and $num==2092){$restr = "fou";}
elseif($num>=2093 and $num==2126){$restr = "fu";}
elseif($num>=2127 and $num==2162){$restr = "ga";}
elseif($num>=2163 and $num==2212){$restr = "gai";}
elseif($num>=2213 and $num==2228){$restr = "gan";}
elseif($num>=2229 and $num==2274){$restr = "gang";}
elseif($num>=2275 and $num==2308){$restr = "gao";}
elseif($num>=2309 and $num==2362){$restr = "ge";}
elseif($num>=2363 and $num==2375){$restr = "gei";}
elseif($num>=2376 and $num==2391){$restr = "gen";}
elseif($num>=2392 and $num==2401){$restr = "geng";}
elseif($num>=2402 and $num==2407){$restr = "gong";}
elseif($num>=2408 and $num==2437){$restr = "gou";}
elseif($num>=2438 and $num==2460){$restr = "gu";}
elseif($num>=2461 and $num==2473){$restr = "gua";}
elseif($num>=2474 and $num==2487){$restr = "guai";}
elseif($num>=2488 and $num==2494){$restr = "guan";}
elseif($num>=2495 and $num==2502){$restr = "guang";}
elseif($num>=2503 and $num==2512){$restr = "gui";}
elseif($num>=2513 and $num==2522){$restr = "gun";}
elseif($num>=2523 and $num==2525){$restr = "guo";}
elseif($num>=2526 and $num==2571){$restr = "ha";}
elseif($num>=2572 and $num==2635){$restr = "hai";}
elseif($num>=2636 and $num==2641){$restr = "han";}
elseif($num>=2642 and $num==2674){$restr = "hang";}
elseif($num>=2675 and $num==2690){$restr = "hao";}
elseif($num>=2691 and $num==2747){$restr = "he";}
elseif($num>=2748 and $num==2790){$restr = "hei";}
elseif($num>=2791 and $num==2801){$restr = "hen";}
elseif($num>=2802 and $num==2808){$restr = "heng";}
elseif($num>=2809 and $num==2828){$restr = "hong";}
elseif($num>=2829 and $num==2858){$restr = "hou";}
elseif($num>=2859 and $num==2865){$restr = "hu";}
elseif($num>=2866 and $num==2902){$restr = "hua";}
elseif($num>=2903 and $num==2925){$restr = "huai";}
elseif($num>=2926 and $num==2947){$restr = "huan";}
elseif($num>=2948 and $num==2955){$restr = "huang";}
elseif($num>=2956 and $num==2979){$restr = "hui";}
elseif($num>=2980 and $num==2983){$restr = "hun";}
elseif($num>=2984 and $num==3006){$restr = "huo";}
elseif($num>=3007 and $num==3016){$restr = "ji";}
elseif($num>=3017 and $num==3036){$restr = "jia";}
elseif($num>=3037 and $num==3068){$restr = "jian";}
elseif($num>=3069 and $num==3097){$restr = "jiang";}
elseif($num>=3098 and $num==3113){$restr = "jiao";}
elseif($num>=3114 and $num==3124){$restr = "jie";}
elseif($num>=3125 and $num==3142){$restr = "jin";}
elseif($num>=3143 and $num==3162){$restr = "jing";}
elseif($num>=3163 and $num==3175){$restr = "jiong";}
elseif($num>=3176 and $num==3194){$restr = "jiu";}
elseif($num>=3195 and $num==3223){$restr = "ju";}
elseif($num>=3224 and $num==3241){$restr = "juan";}
elseif($num>=3242 and $num==3246){$restr = "jue";}
elseif($num>=3247 and $num==3252){$restr = "jun";}
elseif($num>=3253 and $num==3259){$restr = "ka";}
elseif($num>=3260 and $num==3270){$restr = "kai";}
elseif($num>=3271 and $num==3278){$restr = "kan";}
elseif($num>=3279 and $num==3308){$restr = "kang";}
elseif($num>=3309 and $num==3323){$restr = "kao";}
elseif($num>=3324 and $num==3334){$restr = "ke";}
elseif($num>=3335 and $num==3341){$restr = "kei";}
elseif($num>=3342 and $num==3358){$restr = "ken";}
elseif($num>=3359 and $num==3369){$restr = "keng";}
elseif($num>=3370 and $num==3425){$restr = "kong";}
elseif($num>=3426 and $num==3460){$restr = "kou";}
elseif($num>=3461 and $num==3476){$restr = "ku";}
elseif($num>=3477 and $num==3487){$restr = "kua";}
elseif($num>=3488 and $num==3494){$restr = "kuai";}
elseif($num>=3495 and $num==3507){$restr = "kuan";}
elseif($num>=3508 and $num==3516){$restr = "kuang";}
elseif($num>=3517 and $num==3522){$restr = "kui";}
elseif($num>=3523 and $num==3530){$restr = "kun";}
elseif($num>=3531 and $num==3535){$restr = "kuo";}
elseif($num>=3536 and $num==3558){$restr = "la";}
elseif($num>=3559 and $num==3587){$restr = "lai";}
elseif($num>=3588 and $num==3625){$restr = "lan";}
elseif($num>=3626 and $num==3653){$restr = "lang";}
elseif($num>=3654 and $num==3664){$restr = "lao";}
elseif($num>=3665 and $num==3712){$restr = "le";}
elseif($num>=3713 and $num==3715){$restr = "lei";}
elseif($num>=3716 and $num==3722){$restr = "leng";}
elseif($num>=3723 and $num==3730){$restr = "li";}
elseif($num>=3731 and $num==3790){$restr = "lia";}
elseif($num>=3791 and $num==3801){$restr = "lian";}
elseif($num>=3802 and $num==3840){$restr = "liang";}
elseif($num>=3841 and $num==3864){$restr = "liao";}
elseif($num>=3865 and $num==3874){$restr = "lie";}
elseif($num>=3875 and $num==3895){$restr = "lin";}
elseif($num>=3896 and $num==3927){$restr = "ling";}
elseif($num>=3928 and $num==3960){$restr = "liu";}
elseif($num>=3961 and $num==3967){$restr = "long";}
elseif($num>=3968 and $num==4027){$restr = "lou";}
elseif($num>=4028 and $num==4054){$restr = "lu";}
elseif($num>=4055 and $num==4076){$restr = "lv";}
elseif($num>=4077 and $num==4142){$restr = "luan";}
elseif($num>=4143 and $num==4159){$restr = "lue";}
elseif($num>=4160 and $num==4185){$restr = "lun";}
elseif($num>=4186 and $num==4194){$restr = "luo";}
elseif($num>=4195 and $num==4196){$restr = "ma";}
elseif($num>=4197 and $num==4226){$restr = "mai";}
elseif($num>=4227 and $num==4237){$restr = "man";}
elseif($num>=4238 and $num==4259){$restr = "mang";}
elseif($num>=4260 and $num==4277){$restr = "mao";}
elseif($num>=4278 and $num==4305){$restr = "me";}
elseif($num>=4306 and $num==4323){$restr = "mei";}
elseif($num>=4324 and $num==4351){$restr = "men";}
elseif($num>=4352 and $num==4375){$restr = "meng";}
elseif($num>=4376 and $num==4378){$restr = "mi";}
elseif($num>=4379 and $num==4414){$restr = "mian";}
elseif($num>=4415 and $num==4428){$restr = "miao";}
elseif($num>=4429 and $num==4436){$restr = "mie";}
elseif($num>=4437 and $num==4447){$restr = "min";}
elseif($num>=4448 and $num==4466){$restr = "ming";}
elseif($num>=4467 and $num==4468){$restr = "miu";}
elseif($num>=4469 and $num==4524){$restr = "mo";}
elseif($num>=4525 and $num==4554){$restr = "mou";}
elseif($num>=4555 and $num==4579){$restr = "mu";}
elseif($num>=4580 and $num==4697){$restr = "na";}
elseif($num>=4698 and $num==4725){$restr = "nai";}
elseif($num>=4726 and $num==4745){$restr = "nan";}
elseif($num>=4746 and $num==4785){$restr = "nang";}
elseif($num>=4786 and $num==4818){$restr = "nao";}
elseif($num>=4819 and $num==4842){$restr = "ne";}
elseif($num>=4843 and $num==4857){$restr = "nei";}
elseif($num>=4858 and $num==4865){$restr = "nen";}
elseif($num>=4866 and $num==4873){$restr = "neng";}
elseif($num>=4874 and $num==4893){$restr = "ni";}
elseif($num>=4894 and $num==4937){$restr = "nian";}
elseif($num>=4938 and $num==4955){$restr = "niang";}
elseif($num>=4956 and $num==4968){$restr = "niao";}
elseif($num>=4969 and $num==4978){$restr = "nie";}
elseif($num>=4979 and $num==4990){$restr = "nin";}
elseif($num>=4991 and $num==5034){$restr = "ning";}
elseif($num>=5035 and $num==5060){$restr = "niu";}
elseif($num>=5061 and $num==5071){$restr = "nong";}
elseif($num>=5072 and $num==5096){$restr = "nu";}
elseif($num>=5097 and $num==5119){$restr = "nv";}
elseif($num>=5120 and $num==5124){$restr = "nuan";}
elseif($num>=5125 and $num==5128){$restr = "nue";}
elseif($num>=5129 and $num==5143){$restr = "nuo";}
elseif($num>=5144 and $num==5224){$restr = "o";}
elseif($num>=5225 and $num==5228){$restr = "ou";}
elseif($num>=5229 and $num==5269){$restr = "pa";}
elseif($num>=5270 and $num==5299){$restr = "pai";}
elseif($num>=5300 and $num==5304){$restr = "pan";}
elseif($num>=5305 and $num==5347){$restr = "pang";}
elseif($num>=5348 and $num==5354){$restr = "pao";}
elseif($num>=5355 and $num==5366){$restr = "pei";}
elseif($num>=5367 and $num==5373){$restr = "pen";}
elseif($num>=5374 and $num==5379){$restr = "peng";}
elseif($num>=5380 and $num==5384){$restr = "pi";}
elseif($num>=5385 and $num==5425){$restr = "pian";}
elseif($num>=5426 and $num==5428){$restr = "piao";}
elseif($num>=5429 and $num==5433){$restr = "pie";}
elseif($num>=5434 and $num==5443){$restr = "pin";}
elseif($num>=5444 and $num==5463){$restr = "ping";}
elseif($num>=5464 and $num==5468){$restr = "po";}
elseif($num>=5469 and $num==5529){$restr = "pu";}
elseif($num>=5530 and $num==5534){$restr = "qi";}
elseif($num>=5535 and $num==5550){$restr = "qia";}
elseif($num>=5551 and $num==5590){$restr = "qian";}
elseif($num>=5591 and $num==5623){$restr = "qiang";}
elseif($num>=5624 and $num==5636){$restr = "qiao";}
elseif($num>=5637 and $num==5653){$restr = "qie";}
elseif($num>=5654 and $num==5676){$restr = "qin";}
elseif($num>=5677 and $num==5717){$restr = "qing";}
elseif($num>=5718 and $num==5727){$restr = "qiong";}
elseif($num>=5728 and $num==5730){$restr = "qiu";}
elseif($num>=5731 and $num==5765){$restr = "qu";}
elseif($num>=5766 and $num==5786){$restr = "quan";}
elseif($num>=5787 and $num==5793){$restr = "que";}
elseif($num>=5794 and $num==5873){$restr = "qun";}
elseif($num>=5874 and $num==5875){$restr = "ran";}
elseif($num>=5876 and $num==5902){$restr = "rang";}
elseif($num>=5903 and $num==5937){$restr = "rao";}
elseif($num>=5938 and $num==5951){$restr = "re";}
elseif($num>=5952 and $num==5967){$restr = "ren";}
elseif($num>=5968 and $num==5997){$restr = "reng";}
elseif($num>=5998 and $num==6015){$restr = "ri";}
elseif($num>=6016 and $num==6035){$restr = "rong";}
elseif($num>=6036 and $num==6061){$restr = "rou";}
elseif($num>=6062 and $num==6068){$restr = "ru";}
elseif($num>=6069 and $num==6094){$restr = "ruan";}
elseif($num>=6095 and $num==6102){$restr = "rui";}
elseif($num>=6103 and $num==6114){$restr = "run";}
elseif($num>=6115 and $num==6120){$restr = "ruo";}
elseif($num>=6121 and $num==6177){$restr = "sa";}
elseif($num>=6178 and $num==6213){$restr = "sai";}
elseif($num>=6214 and $num==6222){$restr = "san";}
elseif($num>=6223 and $num==6242){$restr = "sang";}
elseif($num>=6243 and $num==6259){$restr = "sao";}
elseif($num>=6260 and $num==6272){$restr = "se";}
elseif($num>=6273 and $num==6335){$restr = "sen";}
elseif($num>=6336 and $num==6351){$restr = "seng";}
elseif($num>=6352 and $num==6387){$restr = "sha";}
elseif($num>=6388 and $num==6404){$restr = "shai";}
elseif($num>=6405 and $num==6422){$restr = "shan";}
elseif($num>=6423 and $num==6456){$restr = "shang";}
elseif($num>=6457 and $num==6468){$restr = "shao";}
elseif($num>=6469 and $num==6529){$restr = "she";}
elseif($num>=6530 and $num==6535){$restr = "shen";}
elseif($num>=6536 and $num==6585){$restr = "sheng";}
elseif($num>=6586 and $num==66
