Posts Tagged user

Apache mod_rewrite模块中RewriteCond和RewriteRule的指令格式

RewriteCond指令格式
语法: RewriteCond TestString CondPattern
1) TestString是一个纯文本的字符串,但是可以包含可扩展的成分
2) CondPattern是条件pattern, 即一个应用于当前实例TestString的正则表达式, 即TestString将会被计算然后与CondPattern匹配.
3) 另外,还可以为CondPattern追加特殊的标记[flags] 作为RewriteCond指令的第三个参数。Flags是一个以逗号分隔的以下标记的列表:
‘nocase|NC’  它使测试忽略大小写, 即TestString和CondPattern无大小写检查
‘ornext|OR’  它以OR方式组合若干规则的条件,而不是隐含的AND。

RewriteRule 指令
语法: RewriteRule Pattern Substitution
1) Pattern是一个作用于当前URL的兼容perl的正则表达式. 这里的“当前”是指该规则生效时的URL的值。
2) Substitution是,当原始URL与Pattern相匹配时,用以替代(或替换)的字符串。
3) 此外,Substitution还可以追加特殊标记[flags]  作为RewriteRule指令的第三个参数。 Flags是一个包含以逗号分隔的下列标记的列表:
‘redirect|R [=code]‘ (强制重定向 redirect)
以http://thishost[:thisport]/(使新的URL成为一个URI) 为前缀的Substitution可以强制性执行一个外部重定向。 如果code没有指定,则产生一个HTTP响应代码302(临时性移动)。 如果需要使用在300-400范围内的其他响应代码,只需在此指定这个数值即可, 另外,还可以使用下列符号名称之一: temp (默认的), permanent, seeother. 用它可以把规范化的URL反馈给客户端,如, 重写“/~”为 “/u/”,或对/u/user加上斜杠,等等。

注意: 在使用这个标记时,必须确保该替换字段是一个有效的URL! 否则,它会指向一个无效的位置! 并且要记住,此标记本身只是对URL加上 http://thishost[:thisport]/的前缀,重写操作仍然会继续。 通常,你会希望停止重写操作而立即重定向,则还需要使用’L'标记.

‘forbidden|F’ (强制URL为被禁止的 forbidden)
强制当前URL为被禁止的,即,立即反馈一个HTTP响应代码403(被禁止的)。 使用这个标记,可以链接若干RewriteConds以有条件地阻塞某些URL。
‘gone|G’ (强制URL为已废弃的 gone)
强制当前URL为已废弃的,即,立即反馈一个HTTP响应代码410(已废弃的)。 使用这个标记,可以标明页面已经被废弃而不存在了.
‘proxy|P’ (强制为代理 proxy)
此标记使替换成分被内部地强制为代理请求,并立即(即, 重写规则处理立即中断)把处理移交给代理模块。 你必须确保此替换串是一个有效的(比如常见的以 http://hostname开头的)能够为Apache代理模块所处理的URI。 使用这个标记,可以把某些远程成分映射到本地服务器名称空间, 从而增强了ProxyPass指令的功能。
注意: 要使用这个功能,代理模块必须编译在Apache服务器中。 如果你不能确定,可以检查“httpd -l”的输出中是否有mod_proxy.c。 如果有,则mod_rewrite可以使用这个功能; 如果没有,则必须启用mod_proxy并重新编译“httpd”程序。

‘last|L’ (最后一个规则 last)
立即停止重写操作,并不再应用其他重写规则。 它对应于Perl中的last命令或C语言中的break命令。 这个标记可以阻止当前已被重写的URL为其后继的规则所重写。 举例,使用它可以重写根路径的URL(’/')为实际存在的URL, 比如, ‘/e/www/’.
‘next|N’ (重新执行 next round)
重新执行重写操作(从第一个规则重新开始). 这时再次进行处理的URL已经不是原始的URL了,而是经最后一个重写规则处理的URL。 它对应于Perl中的next命令或C语言中的continue命令。 此标记可以重新开始重写操作,即, 立即回到循环的头部。
但是要小心,不要制造死循环!
‘chain|C’ (与下一个规则相链接 chained)
此标记使当前规则与下一个(其本身又可以与其后继规则相链接的, 并可以如此反复的)规则相链接。 它产生这样一个效果: 如果一个规则被匹配,通常会继续处理其后继规则, 即,这个标记不起作用;如果规则不能被匹配, 则其后继的链接的规则会被忽略。比如,在执行一个外部重定向时, 对一个目录级规则集,你可能需要删除“.www” (此处不应该出现“.www”的)。
‘type|T=MIME-type’ (强制MIME类型 type)
强制目标文件的MIME类型为MIME-type。 比如,它可以用于模拟mod_alias中的ScriptAlias指令, 以内部地强制被映射目录中的所有文件的MIME类型为“application/x-httpd-cgi”.
‘nosubreq|NS’ (仅用于不对内部子请求进行处理 no internal sub-request)
在当前请求是一个内部子请求时,此标记强制重写引擎跳过该重写规则。 比如,在mod_include试图搜索可能的目录默认文件(index.xxx)时, Apache会内部地产生子请求。对子请求,它不一定有用的,而且如果整个规则集都起作用, 它甚至可能会引发错误。所以,可以用这个标记来排除某些规则。

根据你的需要遵循以下原则: 如果你使用了有CGI脚本的URL前缀,以强制它们由CGI脚本处理, 而对子请求处理的出错率(或者开销)很高,在这种情况下,可以使用这个标记。

‘nocase|NC’ (忽略大小写 no case)
它使Pattern忽略大小写,即, 在Pattern与当前URL匹配时,’A-Z’ 和’a-z’没有区别。
‘qsappend|QSA’ (追加请求串 query string append)
此标记强制重写引擎在已有的替换串中追加一个请求串,而不是简单的替换。 如果需要通过重写规则在请求串中增加信息,就可以使用这个标记。
‘noescape|NE’ (在输出中不对URI作转义 no URI escaping)
此标记阻止mod_rewrite对重写结果应用常规的URI转义规则。 一般情况下,特殊字符(如’%', ‘$’, ‘;’等)会被转义为等值的十六进制编码。 此标记可以阻止这样的转义,以允许百分号等符号出现在输出中,如:
RewriteRule /foo/(.*) /bar?arg=P1\%3d$1 [R,NE]

可以使’/foo/zed’转向到一个安全的请求’/bar?arg=P1=zed’.
‘passthrough|PT’ (移交给下一个处理器 pass through)
此标记强制重写引擎将内部结构request_rec中的uri字段设置为 filename字段的值,它只是一个小修改,使之能对来自其他URI到文件名翻译器的 Alias,ScriptAlias, Redirect 等指令的输出进行后续处理。举一个能说明其含义的例子: 如果要通过mod_rewrite的重写引擎重写/abc为/def, 然后通过mod_alias使/def转变为/ghi,可以这样:
RewriteRule ^/abc(.*) /def$1 [PT]
Alias /def /ghi

如果省略了PT标记,虽然mod_rewrite运作正常, 即, 作为一个使用API的URI到文件名翻译器, 它可以重写uri=/abc/…为filename=/def/…, 但是,后续的mod_alias在试图作URI到文件名的翻译时,则会失效。
注意: 如果需要混合使用不同的包含URI到文件名翻译器的模块时, 就必须使用这个标记。。 混合使用mod_alias和mod_rewrite就是个典型的例子。

For Apache hackers
如果当前Apache API除了URI到文件名hook之外,还有一个文件名到文件名的hook, 就不需要这个标记了! 但是,如果没有这样一个hook,则此标记是唯一的解决方案。 Apache Group讨论过这个问题,并在Apache 2.0 版本中会增加这样一个hook。
’skip|S=num’ (跳过后继的规则 skip)
此标记强制重写引擎跳过当前匹配规则后继的num个规则。 它可以实现一个伪if-then-else的构造: 最后一个规则是then从句,而被跳过的skip=N个规则是else从句. (它和’chain|C’标记是不同的!)
‘env|E=VAR:VAL’ (设置环境变量 environment variable)
此标记使环境变量VAR的值为VAL, VAL可以包含可扩展的反向引用的正则表达式$N和%N。 此标记可以多次使用以设置多个变量。 这些变量可以在其后许多情况下被间接引用,但通常是在XSSI (via <!–#echo var=”VAR”–>) or CGI (如 $ENV{’VAR’})中, 也可以在后继的RewriteCond指令的pattern中通过%{ENV:VAR}作引用。 使用它可以从URL中剥离并记住一些信息。
‘cookie|CO=NAME:VAL:domain[:lifetime[:path]]’ (设置cookie)
它在客户端浏览器上设置一个cookie。 cookie的名称是NAME,其值是VAL。 domain字段是该cookie的域,比如’.apache.org’, 可选的lifetime是cookie生命期的分钟数, 可选的path是cookie的路径。

 其实apache手册中有 http://man.chinaunix.net/newsoft/ApacheManual/mod/mod_rewrite.html

  • Share/Bookmark

Tags: , , , , , , , , , , , , , , , , , ,

雅虎和谷歌都宣布robots.txt文件支持通配符

以下是雅虎Search Blog发表的官方声明和robots.txt通配符解决方案:
Yahoo! Search Crawler (Yahoo! Slurp) – Supporting wildcards in robots.txt

I was going through my notes from Danny Sullivan’s Open Feedback sessions that occur during the ?Meet the Crawlers? panel at Search Engine Strategies. One of the items on my list was a request for enhanced syntax in robots.txt to make it easier for webmasters to manage how search crawlers, including Slurp, access your content.

For those who may not be as familiar with search index terminology, webmasters use the robots.txt file to direct robots that visit their site, including search engine crawlers, which files should be crawled and which shouldn’t be. You can read about our support for robots directives in the help for Yahoo! Slurp.

Well, we can scratch that one off the list, since we have just updated Yahoo! Slurp to recognize two additional symbols in the robots.txt directives ? ‘*’ and ‘$’. The semantics of these is what is as widely understood for robots.txt files.

‘*’ – matches a sequence of characters

You can now use ‘*’ in robots directives for Yahoo! Slurp to wildcard match a sequence of characters in your URL. You can use this symbol in any part of the URL string you provide in the robots directive. For example,

User-Agent: Yahoo! Slurp
Allow: /public*/  #允许所有以public开头的目录被索引
Disallow: /*_print*.html
Disallow: /*?sessionid #这句的意思是拒绝一切包含sessionid参数的页面被搜索引擎索引。

The robots directives above will:

allow all directories that begin with ‘public’, such as ‘/public_html/’ or ‘/public_graphs/’ to be crawled
disallow any files or directories which contain ‘_print’, such as ‘/card_print.html’ or ‘/store_print/product.html’ to be crawled
disallow any files with ‘?sessionid’ in their URL string, such as ‘/cart.php?sessionid=342bca31? to be crawled
Note that a trailing ‘*’ is redundant since that is existing matching behavior for Slurp. So, the following two directives are equivalent:

User-Agent: Yahoo! Slurp
Disallow: /private*
Disallow: /private

‘$’ ? anchors at the end of the URL string

You can now also use ‘$’ in robots directives for Slurp to anchor the match to the end of the URL string. Without this symbol, Yahoo! Slurp would match all URLs against the directives, treating the directives as a prefix. For example:

User-Agent: Yahoo! Slurp
Disallow: /*.gif$
Allow: /*?$

The robots directives above will

Disallow all files ending in ‘.gif’ in your entire site. Note that without the ‘$’, this would disallow all files containing ‘.gif’ in their file path
Allow all files ending in ‘?’ to be included. This would not automatically allow files that just contain ‘?’ somewhere in the URL string
As you can see, this symbol only makes sense at the end of the string. Hence, when we see it, we assume that your directive terminates there and any characters after that symbol are ignored.

Oh, by the way, if you thought we didn’t support the ‘Allow’ tag, as you can see from these examples, we do.

If you have any questions about the new syntax or any particular cases you are concerned about, please write in at the Site Explorer forums or read up our area.

Next time you see me at SES, you should ask me what else is on my list!

Priyank Garg
Product Manager, Yahoo! Search

可以用google管理员工具测试,一般第一次提交很快就会抓取robots.txt,然后更新就慢了点

  • Share/Bookmark

Tags: , , , , , , , , , , , , , ,

Godaddy域名续费通知

Dear xuexing zhuang,

RENEWAL NOTICE! CRAZYLEMON.NET has not been renewed as of October 22, 2009 and will expire on 01/21/2010.  Renew now and SAVE!**

另一封:

The following domain name(s) are set to automatically renew on the expiration date(s) listed:

 

IMPORTANT: If the credit card we have on file for you has expired or been closed, we will not be able to automatically renew your domain(s). To review and update your credit card information, log in to your account at GoDaddy.com by entering your customer number or user name and password and then clicking “My Account.” When you have accessed the account management area, click the “My Account” button on the left hand side of the screen. Then click the “Credit Cards and Payment Info” link.

提前三个月通知,真够意思的,博客开通九个月了,PR上了3,IP一天有150+,关键字也还好,我不是为SEO而SEO,我只是兴趣,大部份来源是腾讯通RTX破解,寒。。。

该续费了

CRAZYLEMON.NET - Jan. 21, 2010
  • Share/Bookmark

Tags: , , , , , , , , , , , , , ,

bluehost因网站影响服务器性能冻结

前天一朋友为放在我bluehost上的博客购买了付费流量,也就是按月付费,几十块钱,每天能给网站带来几千IP,并承诺一个月内Alexa排名进20万,这个承诺有点胡扯了,不说能不能进,就算进了,本身也是没什么意义的

不过话说回来,进的可能还是大的,因为Alexa排名主要根据网站的非重复IP访问量,Alexa应该有个插件来监测这些数据,不过我感觉好像没用过,估计在中国用的人也不多

对方实现的方式很简单,就是在一个流量较大的网站上挂马,或者是对方自己运营的网站,这类网站有的如小说网,中国喜欢看小说的人多,太费时间了,我是多来不看的

这件事造成了很大麻烦,我真想不到小说有这么多人爱看;首先是公司的bluehost主机被关了,第一反应是侵权,但这些天没排名没广告没出单,前些天的单也过去很久了,老外应该没这么迟钝吧;看了邮件,里面原文如下:

Your web hosting account for XXXXXX.com has been deactivated, as of 10/23/2009. (reason: site causing performance problems)

This deactivation was due to a Terms of Service violation associated with your account. At sign-up, all users state that they have read through, understand, and agree to our terms. These terms are legal and binding.

Although your web site has been suspended, your data may still be available for up to 15 days past the date of deactivation; however, after this time, your account and all of its files, databases, and emails will be deleted.
If you feel this deactivation was made in error, or in order to gain access to your account, please call our customer service line as soon as possible at (888) 401-4678.
Please read the following, derived from our Terms of Service agreement, for additional information regarding the matter.
Engaging in any activity that, in BlueHost.Com’s sole and absolute discretion, disrupts, interferes with, or is harmful to (or threatens to disrupt, interfere with, or be harmful to) BlueHost.Com’s services, BlueHost.Com’s business, operations, reputation, goodwill, subscribers and/or subscriber relations, or the ability of BlueHost.Com’s subscribers to effectively use BlueHost.Com’s services is prohibited.

Please review the current copy of our Terms of Service here:
http://www.bluehost.com/cgi/terms

Thank you,
BlueHost.Com Support
http://www.bluehost.com
For support go to http://helpdesk.bluehost.com/
Toll-Free: (888) 401-4678

原来是网站造成了服务器性能问题,我查了日志,那个博客在一分钟内的请求达到200多次,高并发,造成服务器cpu占用过高,马上被冻结了

第一时间和客服联系上,bluehost的客服响应速度不错,但他们弄错了东西,就是认定是产品站的问题,我可急了,据理力争,让他们查日志去,最后各让一步,我删了那个博客站,总算解冻

如果我没搞错的话,这中间还是有BUG的,不然bluehost也不会搞错网站;客服毕竟是客服,这个,和思力的支持组差不多,汗一个

就像上次IXwebhosting一样,我忘了点应用按钮,以为优惠码不能用了,也是和对方客服争了半天,客服说是优惠码过期,我没办法,后来再试了下,点了应用键,居然行了,看来是客服不太敬业

而有的机子上,就算点了,也是报失效,哈哈,我这电脑的物理地址估计被ixwebhosting加为会员了

  • Share/Bookmark

Tags: , , , , , , , , , , ,

robots.txt使用方法

如何放置Robots.txt文件

robots.txt自身是一个文本文件。它必须位于域名的根目录中并 被命名为”robots.txt”。位于子目录中的 robots.txt 文件无效,因为漫游器只在域名的根目录中查找此文件。例如,http://www.example.com/robots.txt 是有效位置,http://www.example.com/mysite/robots.txt 则不是。

这里举一个
robots.txt的例子:

User-agent: *
Disallow: /cgi-bin/
Disallow: /tmp/
Disallow: /~name/

使用 robots.txt 文件拦截或删除整个网站

要从搜索引擎中删除您的网站,并防止所有漫游器在以后抓取您的网站,请将以下 robots.txt 文件放入您服务器的根目录:

User-agent: *
Disallow: /

要只从 Google 中删除您的网站,并只是防止 Googlebot 将来抓取您的网站,请将以下 robots.txt 文件放入您服务器的根目录:

User-agent: Googlebot
Disallow: /

每个端口都应有自己的 robots.txt 文件。尤其是您通过 http 和 https 托管内容的时候,这些协议都需要有各自的 robots.txt 文件。例如,要让 Googlebot 只为所有的 http 网页而不为 https 网页编制索引,应使用下面的 robots.txt 文件。

对于 http 协议 (http://yourserver.com/robots.txt):

User-agent: *
Allow: /

对于 https 协议 (https://yourserver.com/robots.txt):

User-agent: *
Disallow: /

允许所有的漫游器访问您的网页

User-agent: *
Disallow:

(另一种方法: 建立一个空的 “/robots.txt” 文件, 或者不使用robot.txt。)

使用 robots.txt 文件拦截或删除网页

您可以使用 robots.txt 文件来阻止 Googlebot 抓取您网站上的网页。 例如,如果您正在手动创建 robots.txt 文件以阻止 Googlebot 抓取某一特定目录下(例如,private)的所有网页,可使用以下 robots.txt 条目:

User-agent: Googlebot
Disallow: /private

要阻止 Googlebot 抓取特定文件类型(例如,.gif)的所有文件,可使用以下 robots.txt 条目:

User-agent: Googlebot
Disallow: /*.gif$

要阻止 Googlebot 抓取所有包含 ? 的网址(具体地说,这种网址以您的域名开头,后接任意字符串,然后是问号,而后又是任意字符串),可使用以下条目:

User-agent: Googlebot
Disallow: /*?

尽管我们不抓取被 robots.txt 拦截的网页内容或为其编制索引,但如果我们在网络上的其他网页中发现这些内容,我们仍然会抓取其网址并编制索引。因此,网页网址及其他公开的信息,例如指 向该网站的链接中的定位文字,有可能会出现在 Google 搜索结果中。不过,您网页上的内容不会被抓取、编制索引和显示。

  • Share/Bookmark

Tags: , , , , , , , , , ,

foxmail测试时551 User not local; please try错误

新建邮箱在进行到测试这一步时,报错,信息如下:

(1)“551 User not local; please try ”
(2)“I’m not going to try again; this message has been in the queue too long..”
(3)“信件内容为zzzzzzzzzzzzzz”

故障原因及分析:

出现以上错误信息的原因和所发邮件有没有内容、内容大小等都没有关系,是中国政府的国家防火墙(GFW,又名“金盾工程”)做了过滤的原因,它(金盾工程)定义了大陆的IP连接到大陆以外(如香港、台湾、欧洲等)的邮件服务器是不可以自己发邮件给自己的!只要大陆所在客户端用大陆的IP发送邮件,马上就会提示“551 User not local; please try ”这样的错误信息!

又是GFW搞的鬼

  • Share/Bookmark

Tags: , , ,

MSN在线聊天代码for zen cart

安装完zen cart官方网站上的Live_Help_1.2插件,它本身没有对MSN的支持,所以要仿照其它聊天工具如yahoo等自行插入数据库相应数据,然后在includes\templates\template_default\sideboxes\tpl_live_help.php文件添加如下代码

if (LIVE_HELP_MSN == ‘Enable’) {
  $content .= ‘<a href=”http://settings.messenger.live.com/Conversation/IMMe.aspx?invitee=’ . LIVE_HELP_MSN_USERNAME . ‘&mkt=en” target=”_blank”><img src=”/livehelp.gif” alt=”Sale Rep. Online Click Here For Help!” width=”148″ border=”0″/></a>’;
  }

livehelp.gif自行添加入网站根目录,然后在后台开启MSN功能即可

  • Share/Bookmark

Tags: , , , , ,

HTTP请求报文格式

HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度是不确定的。HTTP有两类报文:请求报文和响应报文。

请求报文
一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成,下图给出了请求报文的一般格式。

http请求报文格式

http请求报文格式

(1)请求行

请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。例如,GET /index.html HTTP/1.1。

HTTP协议的请求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。这里介绍最常用的GET方法和POST方法。

GET:当客户端要从服务器中读取文档时,使用GET方法。GET方法要求服务器将URL定位的资源放在响应报文的数据部分,回送给客户端。使用GET方法时,请求参数和对应的值附加在URL后面,利用一个问号(“?”)代表URL的结尾与请求参数的开始,传递参数长度受限制。例如,/index.jsp?id=100&op=bind。

POST:当客户端给服务器提供信息较多时可以使用POST方法。POST方法将请求参数封装在HTTP请求数据中,以名称/值的形式出现,可以传输大量数据。

(2)请求头部

请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息,典型的请求头有:

User-Agent:产生请求的浏览器类型。

Accept:客户端可识别的内容类型列表。

Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机。

(3)空行

最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头。

(4)请求数据

请求数据不在GET方法中使用,而是在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求数据相关的最常使用的请求头是Content-Type和Content-Length。

 

所谓的google会查看你的电脑硬件信息,我看还是不大可能的,顶多查出你的浏览器和操作系统类型

  • Share/Bookmark

Tags: , , , , ,

完全删除远程桌面连接(mstsc)历史记录

运行注册表regedit,进入到HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client项,在右边窗口有若干个MRU+数字,全部删除

删完后打开mstsc还是会默认显示你上次成功连上的主机,这时只要再成功连一次别的主机,上次的就会没了

  • Share/Bookmark

Tags: , , , , ,

使用Putty密钥验证自动登陆服务器

1、下载Putty
Putty.exe作用是连接运行服务器
官方网站:
http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe
下载后不需要安装,绿色软件直接运行即可

2、下载Puttygen.exe
Puttygen.exe作用是用来生成密钥
官方网站:
http://the.earth.li/~sgtatham/putty/latest/x86/puttygen.exe
PuttYgen 是密钥生成器,用来生成一对公钥和私钥供 PuTTY、PSCP、Plink、Pagent 来使用。

3、运行Puttygen.exe生成密钥
运行Puttygen.exe—->Parameters选项选择—–>SSH-2 RSA——> 点击 Generate 按钮开始生成密钥(可以在程序Key下方的空白处移动鼠标,直到生成密钥结束)—->点下面的 Save private key把私钥保存起来,扩展名是 .ppk 的文件。此时不要关闭程序。

4、连接远程服务器,上传密钥
使用Putty登陆远程服务器,在用户目录下,创建~/.ssh/authorized_keys
例如:

user@crazylemon.net%mkdir ~/.ssh
user@crazylemon.net%cd ~/.ssh
user@crazylemon.net%vi authorized_keys
复制Puttygen.exe程序Public key for pasting into Open SSH authorized_keys file:下面的内容到服务器上的authorized_keys文件中粘贴并保存退出。

5、使用Putty密钥方式验证自动登陆
打开Putty.exe——>Session——>Host name(or IP address)输入远程服务器IP地址—–>Connection——>data——>Auto-login username输入用于登陆的用户名——–>SSH—->Auth——>Private key file for authentication:—–>点击Browser选择到你保存私钥(.pkk)的文件。—->Open自动登陆到服务器上了。

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/36996/showart_381094.html

  • Share/Bookmark

Tags: , , , , , , , , , , ,