Nginx下使用中文URL和中文目录路径

一、确定你的Linux系统是UTF编码,Root登录SSH:

env|grep LANG
LANG=en_US.UTF-8

二、NGINX配置文件里默认编码设置为utf-8

server
{
listen 80;
server_name .inginx.com ;
index index.html index.htm index.php;
root /usr/local/nginx/html/inginx.com;
charset utf-8;
}

三、如果使用putty
windows –> translation –>UTF-8

mkdir 中文目录名
echo ‘中文目录名’ > 中文目录名/中国.html

四、如果是用securecrt 上传文件,请选择 回话–>外观–UTF-8
如果是FTP软件也将默认编码设置为TUF-8

五、如果上传的文件名出现乱码显示
执行

for f in `ls *.html` ; do mv $f `ls $f|iconv -f GBK -t UTF-8`; done

完毕。

转自http://qiaodahai.com/personal/article/2010/nginx-chinese-url-and-chinese-directory-path.htm

帝国cms添加图片alt

文章一:帝国cms中“管理页面关键字”功能问题解决图片ALT被替换的办法

为了加大搜索引擎对自己网站的收录,我们经常会使用内容关键字来让用户或是搜索引擎更好的查阅,但有时候图片里ALT值里面的字被内容关键字的链接更改,导致图片无法正常显示,给我们的内容和美观都带来了麻烦。下面说说我的解决办法:

方法一、对于已有内容修改
打开后台依次找到:栏目管理-其他管理-批量替换字段值,
操作栏目选择你要替换的栏目,也可以选择所有栏目,替换字段,选择newstext(因为我们出问题的是内容页),
原文字里输: $value=addslashes(CopyImg(stripSlashes($value),$add[copyimg],$add[copyflash],$add[classid],$add[qz_url],$username,$add[‘id’],$add[‘filepass’],$add[‘mark’]));

替换为:

                  $value=addslashes(CopyImg(stripSlashes($value),$add[copyimg],$add[copyflash],$add[classid],$add[qz_url],$username,$add['id'],$add['filepass'],$add['mark']));
$value = str_ireplace(array('alt=""','alt=\'\''),'',$value);
$value = preg_replace("@ [\s]{0,}alt[\s]{0,}=[\"'\s]{0,}[\s\S]{0,}[\"'\s] @isU"," ",$value);
$value = str_ireplace("\\\"$add[title]\\\"

2、图片alt防关键词链接,基于前一个修改基础上
修改e/class/functions.php中:

$add[newstext]=ReplaceKey($add[newstext]);

替换为:

$add[newstext]=str_ireplace($add[title],"[!--newstext.temp--]",$add[newstext]);
$add[newstext]=ReplaceKey($add[newstext]);
$add[newstext]=str_ireplace("[!--newstext.temp--]",$add[title],$add[newstext]);

后台功能位置:其他管理=》新闻系统相关=》管理内容关键字
关键词匹配次数设置:系统设置=》系统参数设置=》信息设置=》信息内容关键字重复替换

转自http://blog.sina.com.cn/s/blog_66a0738b0100o4s5.html

文章二:管理内容关键字对于alt中的图片说明被关键词替换图片无法显示

这个办法是对KissVenus发的解决方法的补充
有的图片不止有alt,还有title 我用了KissVenus的办法解决了alt但是title不能解决,所以自己就修改了下,能用了,所以发上来,本人水平有限,所以只能改成这个样子如果有更好的代码请分享给大家 至于那些会好代码的又不去分享的BS中
KissVenus 原帖地址 http://bbs.phome.net/showthread-13-119120-0.html

如果更换了后登陆后台出现500错误 那是修改错误,请修改前备份这个文件
1、远程及本地图片的alt自动更改为当前文章的标题

修改e/class/functions.php
要替换两处,注意必须2处都要更换

$value=addslashes(CopyImg(stripSlashes($value),$add[copyimg],$add[copyflash],$add[classid],$add[qz_url],$username,$add['id'],$add['filepass'],$add['mark']));

替换为

$value=addslashes(CopyImg(stripSlashes($value),$add[copyimg],$add[copyflash],$add[classid],$add[qz_url],$username,$add['id'],$add['filepass'],$add['mark']));
//hack KissVenus
$value = str_ireplace(array('alt=""','alt=\'\''),'',$value);
$value = preg_replace("@ [\s]{0,}alt[\s]{0,}=[\"'\s]{0,}[\s\S]{0,}[\"'\s] @isU"," ",$value);
$value = str_ireplace("\\\"$add[title]\\\"

2、图片alt防关键词链接,基于前一个修改基础上

修改e/class/functions.php

$add[newstext]=ReplaceKey($add[newstext]);

替换为

//KissVenus
$add[newstext]=str_ireplace($add[title],"[!--newstext.temp--]",$add[newstext]);
$add[newstext]=ReplaceKey($add[newstext]);
$add[newstext]=str_ireplace("[!--newstext.temp--]",$add[title],$add[newstext]);
//KissVenus

转自http://blog.sina.com.cn/s/blog_66a0738b0100o4tg.html

另一个方法,6.0以后不知道能否使用,如下

在functions.php修改gethtml()函数。
加入

$newstempstr=str_replace("

灵感来自http://bbs.phome.net/showthread-13-145997-0.html

坑爹啊不带这么玩的

坑爹啊,百度收录只有44了,这是哪门子的事儿?搞不清楚了啊!我也没得罪谁吧,哎一个破博客收录成这样子?算了,不管了,爱咋地咋地。只是觉得做好博客的心没了。算了,反正准备闭关了。

Typecho的伪静态规则

一、Apache

RewriteEngine On # 下面是在根目录,文件夹要修改路径,如 /typecho/,同时 RewriteRule 也要跟着变

RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php/$1 [L]

外加一个顶级域名和二级域名的跳转

# 带 www 的跳转到不带的
RewriteCond %{HTTP_HOST} ^www.moper.me
RewriteRule (.*) https://moper.me/$1 [R=301,L]

# 不带 www 的跳转到带的
RewriteCond %{HTTP_HOST} ^moper.me
RewriteRule (.*) https://www.moper.me/$1 [R=301,L]

注:最新的 SVN 在后台启用重写功能的时候能自动生成 .htaccess 文件。

二、Nginx

location / {
index index.html index.php;
if (-f $request_filename/index.html) {
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php) {
rewrite (.*) $1/index.php;
}
if (!-f $request_filename) {
rewrite (.*) /index.php;
}
}

三、SEA

name: taoblogs
version: 1
#cron:
# - description: cron test
# url: index.php
# schedule: every 43 mins
# timezone: Beijing
handle:
- rewrite: if(!is_dir() && !is_file()) goto "index.php?%{QUERY_STRING}"

四、IIS 下的 httpd.ini

不完美,可参考修改。

[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
# 中文tag解决
RewriteRule /tag/(.*) /index\.php\?tag=$1
# sitemapxml
RewriteRule /sitemap.xml /sitemap.xml [L]
RewriteRule /favicon.ico /favicon.ico [L]
# 内容页
RewriteRule /(.*).html /index.php/$1.html [L]
# 评论
RewriteRule /(.*)/comment /index.php/$1/comment [L]
# 分类页
RewriteRule /category/(.*) /index.php/category/$1 [L]
# 分页
RewriteRule /page/(.*) /index.php/page/$1 [L]
# 搜索页
RewriteRule /search/(.*) /index.php/search/$1 [L]
# feed
RewriteRule /feed/(.*) /index.php/feed/$1 [L]
# 日期归档
RewriteRule /2(.*) /index.php/2$1 [L]
# 上传图片等
RewriteRule /action(.*) /index.php/action$1 [L]

以下好像是WP的,只做参考用

[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
# Protect httpd.ini and httpd.parse.errors files
# from accessing through HTTP
# Rules to ensure that normal content gets through
RewriteRule /sitemap.xml /sitemap.xml [L]
RewriteRule /favicon.ico /favicon.ico [L]
# For file-based wordpress content (i.e. theme), admin, etc.
RewriteRule /wp-(.*) /wp-$1 [L]
# For normal wordpress content, via index.php
RewriteRule ^/$ /index.php [L]
RewriteRule /(.*) /index.php/$1 [L]

注:记得到后台永久链接设置里,启用地址重写功能。

转自http://zhangtao.cc/jiaocheng/typecho_rewrite.html

帝国cms中TAGS分页太多

用的是 [!–show.listpage–]

解:修改e/tags/index.php

$page_line=16;//每页显示链接数

ET设置文件下载采集图片发布后图片地址错误

采集内容到帝国,

newstext=

这里是发送代码的内容,都是正确的,设定了附件域名,也正常上传,但是发布后,实际帝国中出现的地址为

src="https://XXXX/d/file/201206/b036aac966ec17834afa754bacb083bf.jpg

即文件名h1896251705331.jpg,变为了b036aac966ec17834afa754bacb083bf.jpg 。变成的这个地址也不是原先采集地方的图片地址。

解决方法是在发布配置里面设置发布参数copyimg=0,去掉接口自带的图片下载功能,因为两者只能使用一种来下载图片,否则会造成冲突。

帝国tag链接显示为ID连接方式

在使用帝国CMS的过程中,发现启用tag后,连接的地址中有中文,随即想到用tagid来作为访问地址,避免中文对收录的影响。

使用情况为设置cid为selfinfo的情况下,如果设定了cid,此方法无效。

即[showtags]'selfinfo',10,10,'tagid desc',0,'','   ',0,''[/showtags]

1、修改e\class\t_functions.php文件中sys_eShowTags函数

//显示TAGS
function sys_eShowTags($cid,$num=0,$line=0,$order='',$isgood='',$isgoodshow='',$showjg='',$shownum=0,$cs=''){
	global $empire,$dbtbpre,$public_r,$navinfor;
	$str='';
	if(empty($showjg))
	{
		$showjg='   ';
	}
	$ln=0;
	if($cid=='selfinfo')
	{
		if(empty($navinfor['infotags']))
		{
			return '';
		}
		$jg='';
		$r=explode(',',$navinfor['infotags']);		
		$count=count($r);	
		for($i=0;$i<$count;$i++)
		{
		$sql=$empire->query("select tagid from {$dbtbpre}enewstags where tagname='".$r[$i]."'");
		$rtagid=$empire->fetch($sql);
			$ln++;
			$br='';
			if($line)
			{
				if($ln%$line==0)
				{
					$br='
'; } } $str.=$jg.''.$r[$i].''.$br; //$str.=$jg.''.$r[$i].''.$br; $jg=$br?'':$showjg; } } else { $and=''; $where=''; if($cid) { $where=strstr($cid,',')?"cid in ($cid)":"cid='$cid'"; $and=' and '; } if($isgood) { $where.=$and.'isgood=1'; } if($where) { $where=' where '.$where; } $order=$order?' '.$order:' tagid desc'; $limit=''; if($num) { $limit=' limit '.$num; } //推荐标红 $gfont1=''; $gfont2=''; if($isgoodshow) { if(strstr($isgoodshow,'r')) { $gfont1=''; $gfont2=''; } if(strstr($isgoodshow,'s')) { $gfont1=$gfont1.''; $gfont2=''.$gfont2; } } $jg=''; $snum=''; $sql=$empire->query("select tagid,tagname,num,isgood from {$dbtbpre}enewstags".$where." order by".$order.$limit); while($r=$empire->fetch($sql)) { if($shownum) { $snum='('.$r[num].')'; } $font1=''; $font2=''; if($isgoodshow&&$r[isgood]) { $font1=$gfont1; $font2=$gfont2; } $ln++; $br=''; if($line) { if($ln%$line==0) { $br='
'; } } $str.=$jg.''.$font1.$r[tagname].$snum.$font2.''.$br; $jg=$br?'':$showjg; } } echo $str; }

其实其中加入了三句代码,也可自行修改。

$sql=$empire->query("select tagid from {$dbtbpre}enewstags where tagname='".$r[$i]."'");
$rtagid=$empire->fetch($sql);

$str.=$jg.''.$r[$i].''.$br;

2、加入伪静态规则。
nginx下伪静态为

rewrite "^/tags\/([0-9]+)\.html$" /e/tags/?tagid=$1 last;

完成后又发现tag列表项过多时,会有导航栏,导航栏内的链接为动态形式,需要修改,方法如下。
1、修改e/tag/index.php
172行

$listpage=page1($num,$line,$page_line,$start,$page,$search);

改成

$listpage=pagetag($num,$line,$page_line,$start,$page,$tagid);

2、修改e/class/connect.php
复制一份函数function page1(),命名为function pagetag()
修改
function pagetag()函数如下

//TAGS分页
function pagetag($num,$line,$page_line,$start,$page,$tagid){
	global $fun_r;
	if($num<=$line)
	{
		return '';
	}
	$tagid='_'.$tagid;
	$url='index';
	$snum=2;//最小页数
	$totalpage=ceil($num/$line);//取得总页数
	$firststr=' '.$num.'   ';
	//上一页
	if($page<>0)
	{
		$toppage=''.$fun_r['startpage'].' ';
		$pagepr=$page-1;
		$prepage=''.$fun_r['pripage'].'';
	}
	//下一页
	if($page!=$totalpage-1)
	{
		$pagenex=$page+1;
		$nextpage=' '.$fun_r['nextpage'].'';
		$lastpage=' '.$fun_r['lastpage'].'';
	}
	$starti=$page-$snum<0?0:$page-$snum;
	$no=0;
	for($i=$starti;$i<$totalpage&&$no<$page_line;$i++)
	{
		$no++;
		if($page==$i)
		{
			$is_1="";
			$is_2="";
		}
		else
		{
			$is_1='';
			$is_2="";
		}
		$pagenum=$i+1;
		$returnstr.=" ".$is_1.$pagenum.$is_2;
	}
	$returnstr=$firststr.$toppage.$prepage.$returnstr.$nextpage.$lastpage;
	return $returnstr;
}

3、nginx伪静态规则

rewrite "^/tags\/index\_([0-9]+)\_([0-9]+)\.html$" /e/tags/index.php?page=$2&tagid=$1&line=25&tempid=1 last;

备注:本来想采用输出的内容$returnstr,用正则替换的方法改变链接方式,结果发现无效果,屡试不成功,就放弃了,代码如下。

e/class/connect.php的pagetag函数中,最后一部分改成

$returnstr=$firststr.$toppage.$prepage.$returnstr.$nextpage.$lastpage;
$aaaaa='/e\/tags\/index\.php\?page\=([0-9]+)\&tagid\=([0-9]+)\&line\=25\&tempid\=1/';
$bbbbb='/tags/index_$2_$1.html';
$returnstr=preg_replace($aaaaa,$bbbbb,$returnstr);
return $returnstr;
实现转换成的模式为
tags/index_tagid_page.html
原连接模式为
/e/tags/index.php?page=1&tagid=2&line=25&tempid=1
转换伪静态
rewrite "^/tags\/index\_([0-9]+)\_([0-9]+)\.html$" /e/tags/index.php?page=$2&tagid=$1&line=25&tempid=1 last;

修改帝国文章路径为目录加ID

帝国6.5更改了内容页目录存放形式.如何更改旧文章生成路径?

可以用代码直接改数据库,论坛里找到了一段:

update phome_ecms_表 set newspath=''

但这个的形式是直接将路径改为:目录/ID.html

帝国官方sitemap插件伪静态

其实发现帝国cms还是有些很不人性化的地方,比如tag和sitemap,这种大众的功能不能够做好一点点么?帝国的插件社区应该壮大一点才是啊,这么好的cms应该有很多人推动才是。

回归正题,想修改成的格式为
主页产生格式sitemap.xml
栏目产生格式sitemap1.xml

首先在官方插件的sitemap.php中修改了输出格式。
具体的是把

sitemap.php?classid=

修改为

sitemap.xml

相应的nginx伪静态如下

rewrite "^/sitemap\.xml$" /sitemap.php last;
rewrite "^/sitemap([0-9])\.xml$" /sitemap.php?classid=$1 last;

这里提供修改好的官方sitemap.php下载

帝国官方sitemap插件moper修改版
帝国官方sitemap插件

使用方法
1、将sitemap.php文件上传到帝国安装根目录中
2、在robots.txt文件中加入下面这行:
sitemap: http://你的域名/sitemap.xml

diypage的html后缀伪静态

这个功能爽爽要我500块,没钱啊,所以自己动手丰衣足食吧。
经过不懈的努力diypage的伪静态调整完成,把/abc-111/的伪静态转换成了/abc.html的形式了。思路是采用了输出缓存的更改。把输出的全文用正则替换的方法改变了输出形式。

nginx规则
原版

rewrite "^/([a-z0-9]+\-[a-z0-9\-]+\/)$" /index.php?$1 last;
rewrite "^/(dp\-+[a-z0-9\-]+\.html)$" /index.php?$1 last;
rewrite "^/(pagetype\-+[a-z0-9\-]+\.html)$" /index.php?$1 last;

新版

rewrite "^/([a-z0-9]+\-[a-z0-9\-]+\.html)$" /index.php?$1 last;
rewrite "^/(dp\-+[a-z0-9\-]+\.html)$" /index.php?$1 last;
rewrite "^/(pagetype\-+[a-z0-9\-]+\.html)$" /index.php?$1 last;

实测可用的输出改变代码,加在diypage的index.php的里面。

ob_start();
function change_image_domain(){
$output = ob_get_contents();
ob_clean();
$aaaaa='/([a-zA-Z]+)-([0-9]+)(\/)+/';
$bbbbb='$1-$2.html';
$output=preg_replace($aaaaa,$bbbbb,$output);
$aaaaa2='/([a-zA-Z]+)-([0-9]+)-([0-9]+)(\/)+/';
$bbbbb2='$1-$2-$3.html';
$output=preg_replace($aaaaa2,$bbbbb2,$output);
//$output = str_replace('?view-17/','view-17.html',$output);
echo $output;
}
register_shutdown_function('change_image_domain');

注意,需关闭diypage的gzip功能。亲测有效,使用的请留言交流哈。