<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>赢思传媒</title>
	<atom:link href="http://www.st-winthink.com/index.php/feed" rel="self" type="application/rss+xml" />
	<link>http://www.st-winthink.com</link>
	<description>网站建设 网络推广 域名注册 空间租用 网络营销整体策划  Everything for the Web Professional</description>
	<lastBuildDate>Tue, 12 Jul 2011 00:31:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>nginx rewrite 伪静态配置参数详细说明</title>
		<link>http://www.st-winthink.com/index.php/50.html</link>
		<comments>http://www.st-winthink.com/index.php/50.html#comments</comments>
		<pubDate>Tue, 12 Jul 2011 00:17:34 +0000</pubDate>
		<dc:creator>管理员</dc:creator>
				<category><![CDATA[服务器知识]]></category>
		<category><![CDATA[nginx rewrite]]></category>

		<guid isPermaLink="false">http://www.st-winthink.com/?p=50</guid>
		<description><![CDATA[nginx rewrite 伪静态配置参数和使用例子 附正则使用说明 正则表达式匹配，其中： * ~ 为区分大小写匹配 * ~* 为不区分大小写匹配 * !~和!~*分别为区分大小写不匹配及不区分大小写不匹配 文件及目录匹配，其中： * -f和!-f用来判断是否存在文件 * -d和!-d用来判断是否存在目录 * -e和!-e用来判断是否存在文件或目录 * -x和!-x用来判断文件是否可执行 flag标记有： * last 相当于Apache里的[L]标记，表示完成rewrite * break 终止匹配, 不再匹配后面的规则 * redirect 返回302临时重定向 地址栏会显示跳转后的地址 * permanent 返回301永久重定向 地址栏会显示跳转后的地址 一些可用的全局变量有，可以用做条件判断(待补全) $args $content_length $content_type $document_root $document_uri $host $http_user_agent $http_cookie $limit_rate $request_body_file $request_method $remote_addr $remote_port $remote_user $request_filename $request_uri [...]]]></description>
			<content:encoded><![CDATA[<p>nginx rewrite 伪静态配置参数和使用例子 附正则使用说明</p>
<p>正则表达式匹配，其中：</p>
<div>
<ol title="Double  click to hide line number.">
<li>* ~ 为区分大小写匹配</li>
<li>* ~* 为不区分大小写匹配</li>
<li>* !~和!~*分别为区分大小写不匹配及不区分大小写不匹配</li>
</ol>
</div>
<p><strong>文件及目录匹配，其中：</strong></p>
<div>
<ol title="Double  click to hide line number.">
<li>* -f和!-f用来判断是否存在文件</li>
<li>* -d和!-d用来判断是否存在目录</li>
<li>* -e和!-e用来判断是否存在文件或目录</li>
<li>* -x和!-x用来判断文件是否可执行</li>
</ol>
</div>
<p><strong>flag标记有：</strong></p>
<div>
<ol title="Double  click to hide line number.">
<li>* last 相当于Apache里的[L]标记，表示完成rewrite</li>
<li>* break 终止匹配, 不再匹配后面的规则</li>
<li>* redirect 返回302临时重定向 地址栏会显示跳转后的地址</li>
<li>* permanent 返回301永久重定向 地址栏会显示跳转后的地址</li>
</ol>
</div>
<p><strong>一些可用的全局变量有，可以用做条件判断(待补全)</strong></p>
<div>
<ol title="Double  click to hide line number.">
<li>$args</li>
<li>$content_length</li>
<li>$content_type</li>
<li>$document_root</li>
<li>$document_uri</li>
<li>$host</li>
<li>$http_user_agent</li>
<li>$http_cookie</li>
<li>$limit_rate</li>
<li>$request_body_file</li>
<li>$request_method</li>
<li>$remote_addr</li>
<li>$remote_port</li>
<li>$remote_user</li>
<li>$request_filename</li>
<li>$request_uri</li>
<li>$query_string</li>
<li>$scheme</li>
<li>$server_protocol</li>
<li>$server_addr</li>
<li>$server_name</li>
<li>$server_port</li>
<li>$uri</li>
</ol>
</div>
<p><strong>结合QeePHP的例子</strong></p>
<div>
<ol title="Double  click to hide line number.">
<li>if (!-d $request_filename) {</li>
<li>rewrite ^/([a-z-A-Z]+)/([a-z-A-Z]+)/?(.*)$ /index.php?namespace=user&amp;controller=$1&amp;action=$2&amp;$3 last;</li>
<li>rewrite ^/([a-z-A-Z]+)/?$ /index.php?namespace=user&amp;controller=$1 last;</li>
<li>break;</li>
</ol>
</div>
<p><strong>多目录转成参数</strong><br />
abc.domian.com/sort/2 =&gt; abc.domian.com/index.php?act=sort&amp;name=abc&amp;id=2</p>
<div>
<ol title="Double  click to hide line number.">
<li>if ($host ~* (.*)\.domain\.com) {</li>
<li>set $sub_name $1;</li>
<li>rewrite ^/sort\/(\d+)\/?$ /index.php?act=sort&amp;cid=$sub_name&amp;id=$1 last;</li>
<li>}</li>
</ol>
</div>
<p><strong>目录对换</strong><br />
/123456/xxxx -&gt; /xxxx?id=123456</p>
<div>
<ol title="Double  click to hide line number.">
<li>rewrite ^/(\d+)/(.+)/ /$2?id=$1 last;</li>
</ol>
</div>
<p><strong>例如下面设定nginx在用户使用ie的使用重定向到/nginx-ie目录下：</strong></p>
<div>
<ol title="Double  click to hide line number.">
<li>if ($http_user_agent ~ MSIE) {</li>
<li>rewrite ^(.*)$ /nginx-ie/$1 break;</li>
<li>}</li>
</ol>
</div>
<p><strong>目录自动加“/”</strong></p>
<div>
<ol title="Double  click to hide line number.">
<li>if (-d $request_filename){</li>
<li>rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;</li>
<li>}</li>
</ol>
</div>
<p><strong>禁止htaccess</strong></p>
<div>
<ol title="Double  click to hide line number.">
<li>location ~/\.ht {</li>
<li>deny all;</li>
<li>}</li>
</ol>
</div>
<p><strong>禁止多个目录</strong></p>
<div>
<ol title="Double  click to hide line number.">
<li>location ~ ^/(cron|templates)/ {</li>
<li>deny all;</li>
<li>break;</li>
<li>}</li>
</ol>
</div>
<p><strong>禁止以/data开头的文件</strong><br />
可以禁止/data/下多级目录下.log.txt等请求;</p>
<div>
<ol title="Double  click to hide line number.">
<li>location ~ ^/data {</li>
<li>deny all;</li>
<li>}</li>
</ol>
</div>
<p><strong>禁止单个目录</strong><br />
不能禁止.log.txt能请求</p>
<div>
<ol title="Double  click to hide line number.">
<li>location /searchword/cron/ {</li>
<li>deny all;</li>
<li>}</li>
</ol>
</div>
<p><strong>禁止单个文件</strong></p>
<div>
<ol title="Double  click to hide line number.">
<li>location ~ /data/sql/data.sql {</li>
<li>deny all;</li>
<li>}</li>
</ol>
</div>
<p><strong>给favicon.ico和robots.txt设置过期时间;</strong><br />
这里为favicon.ico为99 天,robots.txt为7天并不记录404错误日志</p>
<div>
<ol title="Double  click to hide line number.">
<li>location ~(favicon.ico) {</li>
<li>log_not_found off;</li>
<li>expires 99d;</li>
<li>break;</li>
<li>}</li>
<li>location ~(robots.txt) {</li>
<li>log_not_found off;</li>
<li>expires 7d;</li>
<li>break;</li>
<li>}</li>
</ol>
</div>
<p><strong>设定某个文件的过期时间;这里为600秒，并不记录访问日志</strong></p>
<div>
<ol title="Double  click to hide line number.">
<li>location ^~ /html/scripts/loadhead_1.js {</li>
<li>access_log off;</li>
<li>root /opt/lampp/htdocs/web;</li>
<li>expires 600;</li>
<li>break;</li>
<li>}</li>
</ol>
</div>
<p><strong>文件反盗链并设置过期时间</strong><br />
这里的return 412 为自定义的http状态码，默认为403，方便找出正确的盗链的请求<br />
“rewrite ^/ http://leech.c1gstudio.com/leech.gif;”显示一张防盗链图片<br />
“access_log off;”不记录访问日志，减轻压力<br />
“expires 3d”所有文件3天的浏览器缓存</p>
<div>
<ol title="Double  click to hide line number.">
<li>location ~* ^.+\.(jpg|jpeg|gif|png|swf|rar|zip|css|js)$ {</li>
<li>valid_referers none blocked *.c1gstudio.com *.c1gstudio.net localhost 208.97.167.194;</li>
<li>if ($invalid_referer) {</li>
<li>rewrite ^/ http://leech.c1gstudio.com/leech.gif;</li>
<li>return 412;</li>
<li>break;</li>
<li>}</li>
<li>access_log off;</li>
<li>root /opt/lampp/htdocs/web;</li>
<li>expires 3d;</li>
<li>break;</li>
<li>}</li>
</ol>
</div>
<p><strong>只充许固定ip访问网站，并加上密码</strong></p>
<div>
<ol title="Double  click to hide line number.">
<li>root /opt/htdocs/www;</li>
<li>allow 208.97.167.194;</li>
<li>allow 222.33.1.2;</li>
<li>allow 231.152.49.4;</li>
<li>deny all;</li>
<li>auth_basic “C1G_ADMIN”;</li>
<li>auth_basic_user_file htpasswd;</li>
</ol>
</div>
<p><strong>将多级目录下的文件转成一个文件，增强seo效果</strong><br />
/job-123-456-789.html 指向/job/123/456/789.html</p>
<div>
<ol title="Double  click to hide line number.">
<li>rewrite ^/job-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /job/$1/$2/jobshow_$3.html last;</li>
</ol>
</div>
<p><strong>将根目录下某个文件夹指向2级目录</strong><br />
如/<strong>shanghai</strong>job/ 指向 /area/<strong>shanghai</strong>/<br />
如果你将last改成permanent，那么浏览器地址栏显是 /location/shanghai/</p>
<div>
<ol title="Double  click to hide line number.">
<li>rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2 last;</li>
</ol>
</div>
<p>上面例子有个问题是访问/shanghai 时将不会匹配</p>
<div>
<ol title="Double  click to hide line number.">
<li>rewrite ^/([0-9a-z]+)job$ /area/$1/ last;</li>
<li>rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2 last;</li>
</ol>
</div>
<p>这样/shanghai 也可以访问了，但页面中的相对链接无法使用，<br />
如./list_1.html真实地址是/area /shanghia/list_1.html会变成/list_1.html,导至无法访问。</p>
<p>那我加上自动跳转也是不行咯<br />
(-d $request_filename)它有个条件是必需为真实目录，而我的rewrite不是的，所以没有效果</p>
<div>
<ol title="Double  click to hide line number.">
<li>if (-d $request_filename){</li>
<li>rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;</li>
<li>}</li>
</ol>
</div>
<p>知道原因后就好办了，让我手动跳转吧</p>
<div>
<ol title="Double  click to hide line number.">
<li>rewrite ^/([0-9a-z]+)job$ /$1job/ permanent;</li>
<li>rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2 last;</li>
</ol>
</div>
<p><strong>文件和目录不存在的时候重定向：</strong></p>
<div>
<ol title="Double  click to hide line number.">
<li>if (!-e $request_filename) {</li>
<li>proxy_pass http://127.0.0.1;</li>
<li>}</li>
</ol>
</div>
<p><strong>域名跳转</strong></p>
<div>
<ol title="Double  click to hide line number.">
<li>server</li>
<li>{</li>
<li>listen 80;</li>
<li>server_name jump.c1gstudio.com;</li>
<li>index index.html index.htm index.php;</li>
<li>root /opt/lampp/htdocs/www;</li>
<li>rewrite ^/ http://www.c1gstudio.com/;</li>
<li>access_log off;</li>
<li>}</li>
</ol>
</div>
<p><strong>多域名转向</strong></p>
<div>
<ol title="Double  click to hide line number.">
<li>server_name www.c1gstudio.com www.c1gstudio.net;</li>
<li>index index.html index.htm index.php;</li>
<li>root /opt/lampp/htdocs;</li>
<li>if ($host ~ “c1gstudio\.net”) {</li>
<li>rewrite ^(.*) http://www.c1gstudio.com$1 permanent;</li>
<li>}</li>
</ol>
</div>
<p><strong>三级域名跳转</strong></p>
<div>
<ol title="Double  click to hide line number.">
<li>if ($http_host ~* “^(.*)\.i\.c1gstudio\.com$”) {</li>
<li>rewrite ^(.*) http://top.yingjiesheng.com$1;</li>
<li>break;</li>
<li>}</li>
</ol>
</div>
<p><strong>域名镜向</strong></p>
<div>
<ol title="Double  click to hide line number.">
<li>server</li>
<li>{</li>
<li>listen 80;</li>
<li>server_name mirror.c1gstudio.com;</li>
<li>index index.html index.htm index.php;</li>
<li>root /opt/lampp/htdocs/www;</li>
<li>rewrite ^/(.*) http://www.c1gstudio.com/$1 last;</li>
<li>access_log off;</li>
<li>}</li>
</ol>
</div>
<p><strong>某个子目录作镜向</strong></p>
<div>
<ol title="Double  click to hide line number.">
<li>location ^~ /zhaopinhui {</li>
<li>rewrite ^.+ http://zph.c1gstudio.com/ last;</li>
<li>break;</li>
<li>}</li>
</ol>
</div>
<p><strong>discuz ucenter home (uchome) rewrite</strong></p>
<div>
<ol title="Double  click to hide line number.">
<li>rewrite ^/(space|network)-(.+)\.html$ /$1.php?rewrite=$2 last;</li>
<li>rewrite ^/(space|network)\.html$ /$1.php last;</li>
<li>rewrite ^/([0-9]+)$ /space.php?uid=$1 last;</li>
</ol>
</div>
<p><strong>discuz 7 rewrite</strong></p>
<div>
<ol title="Double  click to hide line number.">
<li>rewrite ^(.*)/archiver/((fid|tid)-[\w\-]+\.html)$ $1/archiver/index.php?$2 last;</li>
<li>rewrite ^(.*)/forum-([0-9]+)-([0-9]+)\.html$ $1/forumdisplay.php?fid=$2&amp;page=$3 last;</li>
<li>rewrite ^(.*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ $1/viewthread.php?tid=$2&amp;extra=page\%3D$4&amp;page=$3 last;</li>
<li>rewrite ^(.*)/profile-(username|uid)-(.+)\.html$ $1/viewpro.php?$2=$3 last;</li>
<li>rewrite ^(.*)/space-(username|uid)-(.+)\.html$ $1/space.php?$2=$3 last;</li>
<li>rewrite ^(.*)/tag-(.+)\.html$ $1/tag.php?name=$2 last;</li>
</ol>
</div>
<p><strong>给discuz某版块单独配置域名</strong></p>
<div>
<ol title="Double  click to hide line number.">
<li>server_name bbs.c1gstudio.com news.c1gstudio.com;</li>
<li>location = / {</li>
<li>if ($http_host ~ news\.c1gstudio.com$) {</li>
<li>rewrite ^.+ http://news.c1gstudio.com/forum-831-1.html last;</li>
<li>break;</li>
<li>}</li>
<li>}</li>
</ol>
</div>
<p><strong>discuz ucenter 头像 rewrite 优化</strong></p>
<div>
<ol title="Double  click to hide line number.">
<li>location ^~ /ucenter {</li>
<li>location ~ .*\.php?$</li>
<li>{</li>
<li>#fastcgi_pass unix:/tmp/php-cgi.sock;</li>
<li>fastcgi_pass 127.0.0.1:9000;</li>
<li>fastcgi_index index.php;</li>
<li>include fcgi.conf;</li>
<li>}</li>
<li>location /ucenter/data/avatar {</li>
<li>log_not_found off;</li>
<li>access_log off;</li>
<li>location ~ /(.*)_big\.jpg$ {</li>
<li>error_page 404 /ucenter/images/noavatar_big.gif;</li>
<li>}</li>
<li>location ~ /(.*)_middle\.jpg$ {</li>
<li>error_page 404 /ucenter/images/noavatar_middle.gif;</li>
<li>}</li>
<li>location ~ /(.*)_small\.jpg$ {</li>
<li>error_page 404 /ucenter/images/noavatar_small.gif;</li>
<li>}</li>
<li>expires 300;</li>
<li>break;</li>
<li>}</li>
<li>}</li>
</ol>
</div>
<p><strong>jspace rewrite</strong></p>
<div>
<ol title="Double  click to hide line number.">
<li>location ~ .*\.php?$</li>
<li>{</li>
<li>#fastcgi_pass unix:/tmp/php-cgi.sock;</li>
<li>fastcgi_pass 127.0.0.1:9000;</li>
<li>fastcgi_index index.php;</li>
<li>include fcgi.conf;</li>
<li>}</li>
<li>location ~* ^/index.php/</li>
<li>{</li>
<li>rewrite ^/index.php/(.*) /index.php?$1 break;</li>
<li>fastcgi_pass 127.0.0.1:9000;</li>
<li>fastcgi_index index.php;</li>
<li>include fcgi.conf;</li>
<li>}</li>
</ol>
</div>
<p>&nbsp;</p>
<div id="seo_alrp_related"><h2>Posts Related to nginx rewrite 伪静态配置参数详细说明</h2><ul><li><div class="seo_alrp_rl_content"><h3><a href="http://www.st-winthink.com/index.php/44.html" rel="bookmark">禁止右键及查看源代码的方法</a></h3><p>一些禁止查看源文件的脚本，用在网页中，能起到防止别人复制等效果，但是也可以通过其他办法看到源代码，或是复制里面的内容。下面的方法都是一些基本的 js脚本，简单的用用就行了，真正能防到什么程序，谁也不好说。有句话说的好，真正做的好的页面，就不怕被人仿、复制、看，本来互联网就是个开放的嘛。 锁定右键 将网页中的换为如下代码即可： &lt;body oncontextmenu="return false" ondragstart="return false" onselectstart ="return false" onselect="document.selection.empty()" oncopy="document.selection.empty()" onbeforecopy="return false" onmouseup="document.selection.empty()"&gt; 拒绝另存 在和之间加入如下代码： &lt;noscript&gt;&lt;iframe src="/防止被别人框架~~~~~~~~~~~~~~~ &lt;SCRIPT language=javascript&gt; if (top.location != self.location){top.location=self.location; } &lt;/SCRIPT&gt; ~~~~~~~~~~~~~~~~~~~~~~~~~~ 取消选取、防止复制 &lt;SCRIPT language=JavaScript&gt; window.ClearEvent=function(){event.cancelBubble=false;var sSrcTagName=event.srcElement.tagName.toLowerCase(); return (sSrcTagName=="textarea" || sSrcTagName=="input" || sSrcTagName=="select");} window.ClearKey=function(){event.cancelBubble=false;var iKeyCode=event.keyCode;return !(iKeyCode==78 &amp;&amp; event.ctrlKey);} with (window.document){oncontextmenu=onselectstart=ondragstart=window.ClearEvent;onkeydown=window.ClearKey;} &lt;/SCRIPT&gt; &lt;BODY oncontextmenu=self.event.returnValue=false onselectstart="return false"&gt; &lt;body onselectstart="return false"&gt; 不准粘贴 onpaste="return false" 防止复制 oncopy="return false;" oncut="return false;" ...</p></div></li><li><div class="seo_alrp_rl_content"><h3><a href="http://www.st-winthink.com/index.php/46.html" rel="bookmark">图片加水印, 生成缩略图类</a></h3><p>使用方法. // 原始图片 $img1 = './image/test.jpg'; // 水印后的图片 $img2 = './image/test_new.jpg'; // 水印 $water = './image/water.gif'; $img = new image(); // 等比缩放 $img-&gt;param($img1)-&gt;thumb('./image/test_0.jpg', 200,200,0); // ...</p></div></li><li><div class="seo_alrp_rl_content"><h3><a href="http://www.st-winthink.com/index.php/6.html" rel="bookmark">JUWITA SUWITO-Breathe Again</a></h3><p>JUWITA SUWITO-Breathe Again 歌曲：breathe again 歌手：juwita suwito 专辑：斗鱼电视原声大碟 [ti:breathe again] [ar:juwita suwito] [al:斗鱼电视原声大碟] [by:叽里咕噜] breathe again have you wondered how it feels when it's all ...</p></div></li><li><div class="seo_alrp_rl_content"><h3><a href="http://www.st-winthink.com/index.php/43.html" rel="bookmark">Apache中 RewriteCond 规则参数介绍</a></h3><p>Apache中 RewriteCond语句对于我来说一直是个难点，多次试图去把它搞明白，都没有结构，这次我终于算大概知道它的意思了。 RewriteCond就像我们程序中的if语句一样，表示如果符合某个或某几个条件则执行RewriteCond下面紧邻的RewriteRule语句，这就是RewriteCond最原始、基础的功能，为了方便理解，下面来看看几个例子。 RewriteEngine on RewriteCond  %{HTTP_USER_AGENT}  ^Mozilla\/5\.0.* RewriteRule  index.php            index.m.php RewriteCond  %{HTTP_USER_AGENT}  ^Lynx.* RewriteRule  index.php            index.L.php RewriteRule  index.php            index.b.php 上面语句的作用是当你是用FF浏览器访问index.php这个文件的时候，会自动让你访问到index.m.php这个文件，当你是用一些移动终端访问的时候，会让你对index.php这个文件的访问实际访问的是index.L.php去，如果你是用其它的浏览器访问的时候，会让你跳到 index.b.php。在说形象一点，上面的语句就等同于程序里面的下面语句(依PHP语句为例): if($_SERVER['HTTP_USER_AGENT'] == 'Mozilla/5.0') { //跳转到对index.m.php的访问 } else if($_SERVER['HTTP_USER_AGENT'] == 'Lynx') { //跳转到对index.L.php的访问 } ...</p></div></li><li><div class="seo_alrp_rl_content"><h3><a href="http://www.st-winthink.com/index.php/4.html" rel="bookmark">wordpress出现：require(wp-blog-header.php) [function.require]: failed to open stream……解决办法</a></h3><p>今天在服务器上安装Wordpress3.0.1,发现无法安装，首页两行英文： Warning: require(wp-blog-header.php) [function.require]: failed to open stream: No such file or directory in e:\www\web\***\wwwroot\index.php on line 17 Fatal error: require() [function.require]: Failed opening required ...</p></div></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.st-winthink.com/index.php/50.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>图片加水印, 生成缩略图类</title>
		<link>http://www.st-winthink.com/index.php/46.html</link>
		<comments>http://www.st-winthink.com/index.php/46.html#comments</comments>
		<pubDate>Wed, 23 Mar 2011 06:12:50 +0000</pubDate>
		<dc:creator>管理员</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.st-winthink.com/?p=46</guid>
		<description><![CDATA[使用方法. // 原始图片 $img1 = './image/test.jpg'; // 水印后的图片 $img2 = './image/test_new.jpg'; // 水印 $water = './image/water.gif'; $img = new image(); // 等比缩放 $img-&#62;param($img1)-&#62;thumb('./image/test_0.jpg', 200,200,0); // center center 裁剪 $img-&#62;param($img1)-&#62;thumb('./image/test_1.jpg', 200,200,1); // top left 裁剪 $img-&#62;param($img1)-&#62;thumb('./image/test_2.jpg', 200,200,2); // 右下角添加水印 $img-&#62;param($img1)-&#62;water($img2,$water,9); image.php /* +-------------------------------------------------------------+ * &#124; Copyright (c) 2008-2009 Diqiye.Com All rights reserved.         * +-------------------------------------------------------------+ [...]]]></description>
			<content:encoded><![CDATA[<p><strong>使用方法.</strong></p>
<pre name="code" class="php">
// 原始图片
$img1 = './image/test.jpg';
// 水印后的图片
$img2 = './image/test_new.jpg';
// 水印
$water = './image/water.gif';
$img = new image();
// 等比缩放
$img-&gt;param($img1)-&gt;thumb('./image/test_0.jpg', 200,200,0);
// center center 裁剪
$img-&gt;param($img1)-&gt;thumb('./image/test_1.jpg', 200,200,1);
// top left 裁剪
$img-&gt;param($img1)-&gt;thumb('./image/test_2.jpg', 200,200,2);
// 右下角添加水印
$img-&gt;param($img1)-&gt;water($img2,$water,9);</pre>
<p><span id="more-46"></span></p>
<h2>image.php</h2>
<pre name="code" class="php">
/* +-------------------------------------------------------------+
* | Copyright (c) 2008-2009 Diqiye.Com All rights reserved.        
* +-------------------------------------------------------------+
* | Info : 图像处理类
* +-------------------------------------------------------------+
*/
class image {
        // 当前图片
        protected $img;
        // 图像types 对应表
        protected $types = array(
                        1 =&gt; 'gif',
                        2 =&gt; 'jpg',
                        3 =&gt; 'png',
                        6 =&gt; 'bmp'
                    );

        // image
        public function __construct($img=''){
                !$img &amp;&amp; $this-&gt;param($img);
        }

        // Info
        public function param($img){
                $this-&gt;img = $img;
                return $this;
        }

        // imageInfo
        public function getImageInfo($img){
                $info = @getimagesize($img);
                if(isset($this-&gt;types[$info[2]])){
                        $info['ext'] = $info['type'] = $this-&gt;types[$info[2]];
                } else{
                        $info['ext'] = $info['type'] = 'jpg';
                }
                $info['type'] == 'jpg' &amp;&amp; $info['type'] = 'jpeg';
                $info['size'] = @filesize($img);
                return $info;
        }

        // thumb(新图地址, 宽, 高, 裁剪, 允许放大)
        public function thumb($filename,$new_w=160,$new_h=120,$cut=0,$big=0){
        // 获取原图信息   
        $info  = $this-&gt;getImageInfo($this-&gt;img);
        if(!empty($info[0])) {
            $old_w  = $info[0];
            $old_h  = $info[1];
            $type   = $info['type'];
            $ext    = $info['ext'];
            unset($info);
            // 如果原图比缩略图小 并且不允许放大
            if($old_w &lt; $new_h &amp;&amp; $old_h &lt; $new_w &amp;&amp; !$big){
                    return false;
            }
            // 裁剪图片
            if($cut == 0){ // 等比列
                    $scale = min($new_w/$old_w, $new_h/$old_h); // 计算缩放比例
                    $width  = (int)($old_w*$scale); // 缩略图尺寸
                    $height = (int)($old_h*$scale);
                    $start_w = $start_h = 0;
                    $end_w = $old_w;
                    $end_h = $old_h;
            } elseif($cut == 1){ // center center 裁剪
                        $scale1 = round($new_w/$new_h,2);
                        $scale2 = round($old_w/$old_h,2);
                        if($scale1 &gt; $scale2){
                                $end_h = round($old_w/$scale1,2);
                                $start_h = ($old_h-$end_h)/2;
                                $start_w  = 0;
                                $end_w    = $old_w;
                        } else{
                                $end_w  = round($old_h*$scale1,2);
                                $start_w  = ($old_w-$end_w)/2;
                                $start_h = 0;
                                $end_h   = $old_h;
                        }
                        $width = $new_w;
                    $height= $new_h;
                } elseif($cut == 2){ // left top 裁剪           
                        $scale1 = round($new_w/$new_h,2);
                    $scale2 = round($old_w/$old_h,2);
                    if($scale1 &gt; $scale2){
                            $end_h = round($old_w/$scale1,2);
                            $end_w = $old_w;
                    } else{
                            $end_w = round($old_h*$scale1,2);
                            $end_h = $old_h;
                    }
                    $start_w = 0;
                    $start_h = 0;
                    $width = $new_w;
                    $height= $new_h;
                }
            // 载入原图
            $createFun  = 'ImageCreateFrom'.$type;
            $oldimg     = $createFun($this-&gt;img);
            // 创建缩略图
            if($type!='gif' &amp;&amp; function_exists('imagecreatetruecolor')){
                $newimg = imagecreatetruecolor($width, $height);
            } else{
                $newimg = imagecreate($width, $height);
            }
            // 复制图片
            if(function_exists("ImageCopyResampled")){
                    ImageCopyResampled($newimg, $oldimg, 0, 0, $start_w, $start_h, $width, $height, $end_w,$end_h);
            } else{
                ImageCopyResized($newimg, $oldimg, 0, 0, $start_w, $start_h, $width, $height, $end_w,$end_h);
            }

            // 对jpeg图形设置隔行扫描
            $type == 'jpeg' &amp;&amp; imageinterlace($newimg,1);
            // 生成图片
            $imageFun = 'image'.$type;
            !@$imageFun($newimg,$filename) &amp;&amp; die('保存失败!检查目录是否存在并且可写?');
            ImageDestroy($newimg);
            ImageDestroy($oldimg);
            return $filename;
        }
        return false;
    }

    // water(保存地址,水印图片,水印位置,透明度)
        public function water($filename,$water,$pos=0,$pct=80){
                // 加载水印图片
                $info = $this-&gt;getImageInfo($water);
                if(!empty($info[0])){
                        $water_w = $info[0];
                        $water_h = $info[1];
                        $type = $info['type'];
                        $fun  = 'imagecreatefrom'.$type;
                        $waterimg = $fun($water);
                } else{
                        return false;
                }
                // 加载背景图片
                $info = $this-&gt;getImageInfo($this-&gt;img);
                if(!empty($info[0])){
                        $old_w = $info[0];
                        $old_h = $info[1];
                        $type  = $info['type'];
                        $fun   = 'imagecreatefrom'.$type;
                        $oldimg = $fun($this-&gt;img);
                } else{
                        return false;
                }
                // 剪切水印
                $water_w &gt;$old_w &amp;&amp; $water_w = $old_w;
                $water_h &gt;$old_h &amp;&amp; $water_h = $old_h;

                // 水印位置                        
                switch($pos){
                        case 0://随机
                    $posX = rand(0,($old_w - $water_w));
                    $posY = rand(0,($old_h - $water_h));
                    break;
                case 1://1为顶端居左
                    $posX = 0;
                    $posY = 0;
                    break;
                case 2://2为顶端居中
                    $posX = ($old_w - $water_w) / 2;
                    $posY = 0;
                    break;
                case 3://3为顶端居右
                    $posX = $old_w - $water_w;
                    $posY = 0;
                    break;
                case 4://4为中部居左
                    $posX = 0;
                    $posY = ($old_h - $water_h) / 2;
                    break;
                case 5://5为中部居中
                    $posX = ($old_w - $water_w) / 2;
                    $posY = ($old_h - $water_h) / 2;
                    break;
                case 6://6为中部居右
                    $posX = $old_w - $water_w;
                    $posY = ($old_h - $water_h) / 2;
                    break;
                case 7://7为底端居左
                    $posX = 0;
                    $posY = $old_h - $water_h;
                    break;
                case 8://8为底端居中
                    $posX = ($old_w - $water_w) / 2;
                    $posY = $old_h - $water_h;
                    break;
                case 9://9为底端居右
                    $posX = $old_w - $water_w;
                    $posY = $old_h - $water_h;
                    break;
                default: //随机
                    $posX = rand(0,($old_w - $water_w));
                    $posY = rand(0,($old_h - $water_h));
                    break;   
                }
            // 设定图像的混色模式
                imagealphablending($oldimg, true);
                // 添加水印
                imagecopymerge($oldimg, $waterimg, $posX, $posY, 0, 0, $water_w,$water_h,$pct);
                $fun = 'image'.$type;
                !@$fun($oldimg, $filename) &amp;&amp; die('保存失败!检查目录是否存在并且可写?');
                  imagedestroy($oldimg);
                  imagedestroy($waterimg);
                  return $filename;        
        }
}</pre>
<p>小小改动一下，可以提高生成的图像质量</p>
<pre name="code" class="php">
!@$imageFun($newimg,$filename,100)
!@$fun($oldimg, $filename,100)
</pre>
<p>仅对JPEG格式有效</p>
<div id="seo_alrp_related"><h2>Posts Related to 图片加水印, 生成缩略图类</h2><ul><li><div class="seo_alrp_rl_content"><h3><a href="http://www.st-winthink.com/index.php/44.html" rel="bookmark">禁止右键及查看源代码的方法</a></h3><p>一些禁止查看源文件的脚本，用在网页中，能起到防止别人复制等效果，但是也可以通过其他办法看到源代码，或是复制里面的内容。下面的方法都是一些基本的 js脚本，简单的用用就行了，真正能防到什么程序，谁也不好说。有句话说的好，真正做的好的页面，就不怕被人仿、复制、看，本来互联网就是个开放的嘛。 锁定右键 将网页中的换为如下代码即可： &lt;body oncontextmenu="return false" ondragstart="return false" onselectstart ="return false" onselect="document.selection.empty()" oncopy="document.selection.empty()" onbeforecopy="return false" onmouseup="document.selection.empty()"&gt; 拒绝另存 在和之间加入如下代码： &lt;noscript&gt;&lt;iframe src="/防止被别人框架~~~~~~~~~~~~~~~ &lt;SCRIPT language=javascript&gt; if (top.location != self.location){top.location=self.location; } &lt;/SCRIPT&gt; ~~~~~~~~~~~~~~~~~~~~~~~~~~ 取消选取、防止复制 &lt;SCRIPT language=JavaScript&gt; window.ClearEvent=function(){event.cancelBubble=false;var sSrcTagName=event.srcElement.tagName.toLowerCase(); return (sSrcTagName=="textarea" || sSrcTagName=="input" || sSrcTagName=="select");} window.ClearKey=function(){event.cancelBubble=false;var iKeyCode=event.keyCode;return !(iKeyCode==78 &amp;&amp; event.ctrlKey);} with (window.document){oncontextmenu=onselectstart=ondragstart=window.ClearEvent;onkeydown=window.ClearKey;} &lt;/SCRIPT&gt; &lt;BODY oncontextmenu=self.event.returnValue=false onselectstart="return false"&gt; &lt;body onselectstart="return false"&gt; 不准粘贴 onpaste="return false" 防止复制 oncopy="return false;" oncut="return false;" ...</p></div></li><li><div class="seo_alrp_rl_content"><h3><a href="http://www.st-winthink.com/index.php/8.html" rel="bookmark">介绍四种WordPress音乐播放器</a></h3><p>一般博客都会分享一下音乐，比如我之前发的天上没有乌云盖，当时苦于没有好看的播放器...只能用别人的了，现在我有了，而且有好多款，所以发上来提供大家分享咯！ 最简单的就是别人网站上提供的，只要把mp3地址复制上去，就能得到播放器的代码，相当方便，适合不喜欢折腾代码的朋友。网址：http://www.blogcastone.net/ 示例： 然后就是很多博客主页右侧都会有的一个小播放器，在这里感谢海上铁匠，是找他要过来的代码，代码如下： &lt;embed src="http://ons.me/wp-content/uploads/2010/05/music_player.swf" flashvars="mp3=http://dg.tgbus.com/file/3/091022/463644.mp3|http://img.3bu.cn/ring/ring/200708071156984.mp3&amp;autoplay=1" height="20" width="160" wmode="transparent" type="application/x-shockwave-flash" /&gt; 可以放到文章里面（HTML界面加），也可以放到你sidebar.php合适的地方，他就会出现在页面右侧了。 示例：第二排mp3后面的地址就是音乐地址，多首歌用“|”链接，最后的autoplay=0就是自动播放和手动播放。0为手动，1为自动。 第三种是找木木要的，感觉还蛮漂亮的，就收下了，需要下载一个播放器，点我下载。把这个flash文件上传到你主题目录下面，然后在这个目录里找到functions.php文件，里面应该有个function方法吧，加到上面就对了。因为下面这段代码也是一个function方法： function mp3player($atts, $content=null){ extract(shortcode_atts(array("auto"=&gt;'0'),$atts)); return '&lt;embed src="'.get_bloginfo("template_url").'/mp3player.swf?url='.$content.'&amp;amp;autoplay='.$auto.'" type="application/x-shockwave-flash" wmode="transparent" allowscriptaccess="always" ...</p></div></li><li><div class="seo_alrp_rl_content"><h3><a href="http://www.st-winthink.com/index.php/42.html" rel="bookmark">Apache的rewrite的重写相关的参数</a></h3><p>Apache的rewrite的重写非常常用,现总结如下. Apache mod_rewrite规则重写的标志一览 R[=code](force redirect) 强制外部重定向 强制在替代字符串加上http://thishost[:thisport]/前缀重定向到外部的URL.如果code不指定，将用缺省的302 HTTP状态码。 F(force URL to be forbidden)禁用URL,返回403HTTP状态码。 G(force URL to be gone) 强制URL为GONE，返回410HTTP状态码。 P(force proxy) 强制使用代理转发。 L(last rule) 表明当前规则是最后一条规则，停止分析以后规则的重写。 ...</p></div></li><li><div class="seo_alrp_rl_content"><h3><a href="http://www.st-winthink.com/index.php/50.html" rel="bookmark">nginx rewrite 伪静态配置参数详细说明</a></h3><p>nginx rewrite 伪静态配置参数和使用例子 附正则使用说明 正则表达式匹配，其中： * ~ 为区分大小写匹配 * ~* 为不区分大小写匹配 * !~和!~*分别为区分大小写不匹配及不区分大小写不匹配 文件及目录匹配，其中： * -f和!-f用来判断是否存在文件 * -d和!-d用来判断是否存在目录 * -e和!-e用来判断是否存在文件或目录 * -x和!-x用来判断文件是否可执行 flag标记有： * last ...</p></div></li><li><div class="seo_alrp_rl_content"><h3><a href="http://www.st-winthink.com/index.php/30.html" rel="bookmark">我不能呼吸 完整版 &#8211; miss A</a></h3><p>我不能呼吸 完整版 - miss A</p></div></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.st-winthink.com/index.php/46.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>禁止右键及查看源代码的方法</title>
		<link>http://www.st-winthink.com/index.php/44.html</link>
		<comments>http://www.st-winthink.com/index.php/44.html#comments</comments>
		<pubDate>Mon, 07 Mar 2011 10:27:45 +0000</pubDate>
		<dc:creator>管理员</dc:creator>
				<category><![CDATA[Web前端]]></category>
		<category><![CDATA[Hacks]]></category>
		<category><![CDATA[Js]]></category>
		<category><![CDATA[web前端技术]]></category>

		<guid isPermaLink="false">http://www.st-winthink.com/?p=44</guid>
		<description><![CDATA[一些禁止查看源文件的脚本，用在网页中，能起到防止别人复制等效果，但是也可以通过其他办法看到源代码，或是复制里面的内容。下面的方法都是一些基本的 js脚本，简单的用用就行了，真正能防到什么程序，谁也不好说。有句话说的好，真正做的好的页面，就不怕被人仿、复制、看，本来互联网就是个开放的嘛。 锁定右键 将网页中的换为如下代码即可： &#60;body oncontextmenu="return false" ondragstart="return false" onselectstart ="return false" onselect="document.selection.empty()" oncopy="document.selection.empty()" onbeforecopy="return false" onmouseup="document.selection.empty()"&#62; 拒绝另存 在和之间加入如下代码： &#60;noscript&#62;&#60;iframe src="/防止被别人框架~~~~~~~~~~~~~~~ &#60;SCRIPT language=javascript&#62; if (top.location != self.location){top.location=self.location; } &#60;/SCRIPT&#62; ~~~~~~~~~~~~~~~~~~~~~~~~~~ 取消选取、防止复制 &#60;SCRIPT language=JavaScript&#62; window.ClearEvent=function(){event.cancelBubble=false;var sSrcTagName=event.srcElement.tagName.toLowerCase(); return (sSrcTagName=="textarea" &#124;&#124; sSrcTagName=="input" &#124;&#124; sSrcTagName=="select");} window.ClearKey=function(){event.cancelBubble=false;var iKeyCode=event.keyCode;return !(iKeyCode==78 &#38;&#38; event.ctrlKey);} with (window.document){oncontextmenu=onselectstart=ondragstart=window.ClearEvent;onkeydown=window.ClearKey;} &#60;/SCRIPT&#62; &#60;BODY oncontextmenu=self.event.returnValue=false onselectstart="return false"&#62; &#60;body onselectstart="return false"&#62; 不准粘贴 onpaste="return false" 防止复制 oncopy="return false;" oncut="return false;" 关闭输入法 &#60;input style="ime-mode:disabled"&#62; There are no posts related to 禁止右键及查看源代码的方法.]]></description>
			<content:encoded><![CDATA[<p>一些禁止查看源文件的脚本，用在网页中，能起到防止别人复制等效果，但是也可以通过其他办法看到源代码，或是复制里面的内容。下面的方法都是一些基本的 js脚本，简单的用用就行了，真正能防到什么程序，谁也不好说。有句话说的好，真正做的好的页面，就不怕被人仿、复制、看，本来互联网就是个开放的嘛。</p>
<p><strong>锁定右键</strong><br />
将网页中的换为如下代码即可：</p>
<pre name="code" class="html">  &lt;body oncontextmenu="return false" ondragstart="return false" onselectstart ="return false" onselect="document.selection.empty()" oncopy="document.selection.empty()" onbeforecopy="return false" onmouseup="document.selection.empty()"&gt;</pre>
<p><span id="more-44"></span><br />
<strong>拒绝另存</strong></p>
<p>在和之间加入如下代码：</p>
<pre name="code" class="html">
&lt;noscript&gt;&lt;iframe src="/防止被别人框架~~~~~~~~~~~~~~~
</pre>
<pre name="code" class="html">
&lt;SCRIPT language=javascript&gt;
if (top.location != self.location){top.location=self.location; }
&lt;/SCRIPT&gt;</pre>
<p>~~~~~~~~~~~~~~~~~~~~~~~~~~</p>
<p><strong>取消选取、防止复制</strong></p>
<pre name="code" class="html">
&lt;SCRIPT language=JavaScript&gt;
window.ClearEvent=function(){event.cancelBubble=false;var sSrcTagName=event.srcElement.tagName.toLowerCase();
return (sSrcTagName=="textarea" || sSrcTagName=="input" || sSrcTagName=="select");}
window.ClearKey=function(){event.cancelBubble=false;var iKeyCode=event.keyCode;return !(iKeyCode==78 &amp;&amp; event.ctrlKey);}
with (window.document){oncontextmenu=onselectstart=ondragstart=window.ClearEvent;onkeydown=window.ClearKey;}
&lt;/SCRIPT&gt;
</pre>
<pre name="code" class="html">
&lt;BODY oncontextmenu=self.event.returnValue=false onselectstart="return false"&gt;</pre>
<pre name="code" class="html">
&lt;body onselectstart="return false"&gt; </pre>
<p><strong>不准粘贴</strong></p>
<pre name="code" class="html">
onpaste="return false" </pre>
<p><strong>防止复制</strong></p>
<pre name="code" class="html">
oncopy="return false;" oncut="return false;"</pre>
<p><strong>关闭输入法</strong></p>
<pre name="code" class="html">
&lt;input style="ime-mode:disabled"&gt;</pre>
<p>There are no posts related to 禁止右键及查看源代码的方法.</p>]]></content:encoded>
			<wfw:commentRss>http://www.st-winthink.com/index.php/44.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache中 RewriteCond 规则参数介绍</title>
		<link>http://www.st-winthink.com/index.php/43.html</link>
		<comments>http://www.st-winthink.com/index.php/43.html#comments</comments>
		<pubDate>Mon, 07 Mar 2011 10:24:46 +0000</pubDate>
		<dc:creator>管理员</dc:creator>
				<category><![CDATA[服务器知识]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[rewrite]]></category>
		<category><![CDATA[服务器]]></category>

		<guid isPermaLink="false">http://www.st-winthink.com/?p=43</guid>
		<description><![CDATA[Apache中 RewriteCond语句对于我来说一直是个难点，多次试图去把它搞明白，都没有结构，这次我终于算大概知道它的意思了。 RewriteCond就像我们程序中的if语句一样，表示如果符合某个或某几个条件则执行RewriteCond下面紧邻的RewriteRule语句，这就是RewriteCond最原始、基础的功能，为了方便理解，下面来看看几个例子。 RewriteEngine on RewriteCond  %{HTTP_USER_AGENT}  ^Mozilla\/5\.0.* RewriteRule  index.php            index.m.php RewriteCond  %{HTTP_USER_AGENT}  ^Lynx.* RewriteRule  index.php            index.L.php RewriteRule  index.php            index.b.php 上面语句的作用是当你是用FF浏览器访问index.php这个文件的时候，会自动让你访问到index.m.php这个文件，当你是用一些移动终端访问的时候，会让你对index.php这个文件的访问实际访问的是index.L.php去，如果你是用其它的浏览器访问的时候，会让你跳到 index.b.php。在说形象一点，上面的语句就等同于程序里面的下面语句(依PHP语句为例): if($_SERVER['HTTP_USER_AGENT'] == 'Mozilla/5.0') { //跳转到对index.m.php的访问 } else if($_SERVER['HTTP_USER_AGENT'] == 'Lynx') { //跳转到对index.L.php的访问 } else //跳转到对index.b.php的访问 在看例2： RewriteCond %{HTTP_REFERER} (www.test.cn) RewriteRule (.*)$ test.php 上面语句的作用是如果你访问的上一个页面的主机地址是www.test.cn，则无论你当前访问的是哪个页面，都会跳转到对test.php的访问。 在看例三： RewriteCond %{REMOTE_HOST} ^host1.* [OR] RewriteCond %{REMOTE_HOST} ^host2.* [OR] RewriteCond %{REMOTE_HOST} ^host3.* RewriteRule (.*)$ test.php 上面语句的作用是如果你的地址是host1或host2或host3的时候，则就跳到对test.php。从这里可以看出，RewriteCond语句之间默认的是AND,如果想要OR,则要明确的写出来。 下面是自己收藏的一些有用的重写规则： RewriteCond %{REQUEST_FILENAME} !-f   //如果文件存在，就直接访问文件，不进行下面的RewriteRule.(不是文件或文件不存在就执行重写) RewriteCond [...]]]></description>
			<content:encoded><![CDATA[<p>Apache中 RewriteCond语句对于我来说一直是个难点，多次试图去把它搞明白，都没有结构，这次我终于算大概知道它的意思了。<br />
RewriteCond就像我们程序中的if语句一样，表示如果符合某个或某几个条件则执行RewriteCond下面紧邻的RewriteRule语句，这就是RewriteCond最原始、基础的功能，为了方便理解，下面来看看几个例子。<span id="more-43"></span></p>
<pre name="code" class="c-sharp">
RewriteEngine on
RewriteCond  %{HTTP_USER_AGENT}  ^Mozilla\/5\.0.*
RewriteRule  index.php            index.m.php

RewriteCond  %{HTTP_USER_AGENT}  ^Lynx.*
RewriteRule  index.php            index.L.php

RewriteRule  index.php            index.b.php
</pre>
<p>上面语句的作用是当你是用FF浏览器访问index.php这个文件的时候，会自动让你访问到index.m.php这个文件，当你是用一些移动终端访问的时候，会让你对index.php这个文件的访问实际访问的是index.L.php去，如果你是用其它的浏览器访问的时候，会让你跳到 index.b.php。在说形象一点，上面的语句就等同于程序里面的下面语句(依PHP语句为例):</p>
<pre name="code" class="php">
if($_SERVER['HTTP_USER_AGENT'] == 'Mozilla/5.0')
{
//跳转到对index.m.php的访问
}
else if($_SERVER['HTTP_USER_AGENT'] == 'Lynx')
{
//跳转到对index.L.php的访问
}
else
//跳转到对index.b.php的访问
</pre>
<p>在看例2：</p>
<pre name="code" class="c-sharp">
RewriteCond %{HTTP_REFERER} (www.test.cn)
RewriteRule (.*)$ test.php
</pre>
<p>上面语句的作用是如果你访问的上一个页面的主机地址是www.test.cn，则无论你当前访问的是哪个页面，都会跳转到对test.php的访问。</p>
<p>在看例三：</p>
<pre name="code" class="c-sharp">
RewriteCond %{REMOTE_HOST} ^host1.* [OR]
RewriteCond %{REMOTE_HOST} ^host2.* [OR]
RewriteCond %{REMOTE_HOST} ^host3.*
RewriteRule (.*)$ test.php
</pre>
<p>上面语句的作用是如果你的地址是host1或host2或host3的时候，则就跳到对test.php。从这里可以看出，RewriteCond语句之间默认的是AND,如果想要OR,则要明确的写出来。</p>
<p>下面是自己收藏的一些有用的重写规则：<br />
<span style="color: #ff0000;">RewriteCond %{REQUEST_FILENAME} !-f   //</span><span style="color: #ff0000;">如果文件存在，就直接访问文件，不进行下面的RewriteRule.(不是文件或文件不存在就执行重写)</p>
<p></span><span style="color: #ff0000;"><code><span style="font-family: NSimsun;">RewriteCond %{REQUEST_FILENAME} !-d   //#如果目录存在就直接访问目录不进行RewriteRule</span></code></span></p>
<p><span style="color: #ff0000;"><code><span style="font-family: NSimsun;">RewriteCond %{REQUEST_URI} !^.*(\.css|\.js|\.gif|\.png|\.jpg|\.jpeg)$ //#如果是这些后缀的文件，就直接访问文件，不进行Rewrite</span></code></span></p>
<div id="seo_alrp_related"><h2>Posts Related to Apache中 RewriteCond 规则参数介绍</h2><ul><li><div class="seo_alrp_rl_content"><h3><a href="http://www.st-winthink.com/index.php/42.html" rel="bookmark">Apache的rewrite的重写相关的参数</a></h3><p>Apache的rewrite的重写非常常用,现总结如下. Apache mod_rewrite规则重写的标志一览 R[=code](force redirect) 强制外部重定向 强制在替代字符串加上http://thishost[:thisport]/前缀重定向到外部的URL.如果code不指定，将用缺省的302 HTTP状态码。 F(force URL to be forbidden)禁用URL,返回403HTTP状态码。 G(force URL to be gone) 强制URL为GONE，返回410HTTP状态码。 P(force proxy) 强制使用代理转发。 L(last rule) 表明当前规则是最后一条规则，停止分析以后规则的重写。 ...</p></div></li><li><div class="seo_alrp_rl_content"><h3><a href="http://www.st-winthink.com/index.php/50.html" rel="bookmark">nginx rewrite 伪静态配置参数详细说明</a></h3><p>nginx rewrite 伪静态配置参数和使用例子 附正则使用说明 正则表达式匹配，其中： * ~ 为区分大小写匹配 * ~* 为不区分大小写匹配 * !~和!~*分别为区分大小写不匹配及不区分大小写不匹配 文件及目录匹配，其中： * -f和!-f用来判断是否存在文件 * -d和!-d用来判断是否存在目录 * -e和!-e用来判断是否存在文件或目录 * -x和!-x用来判断文件是否可执行 flag标记有： * last ...</p></div></li><li><div class="seo_alrp_rl_content"><h3><a href="http://www.st-winthink.com/index.php/24.html" rel="bookmark">WP-Syntax Usage</a></h3><p>WP-Syntax WP-Syntax provides clean syntax highlighting for embedding source code within pages or posts. * Description * Installation * Faq * Screenshots * Other Notes ...</p></div></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.st-winthink.com/index.php/43.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache的rewrite的重写相关的参数</title>
		<link>http://www.st-winthink.com/index.php/42.html</link>
		<comments>http://www.st-winthink.com/index.php/42.html#comments</comments>
		<pubDate>Mon, 07 Mar 2011 10:21:04 +0000</pubDate>
		<dc:creator>管理员</dc:creator>
				<category><![CDATA[服务器知识]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[rewrite]]></category>
		<category><![CDATA[服务器]]></category>

		<guid isPermaLink="false">http://www.st-winthink.com/?p=42</guid>
		<description><![CDATA[Apache的rewrite的重写非常常用,现总结如下. Apache mod_rewrite规则重写的标志一览 R[=code](force redirect) 强制外部重定向 强制在替代字符串加上http://thishost[:thisport]/前缀重定向到外部的URL.如果code不指定，将用缺省的302 HTTP状态码。 F(force URL to be forbidden)禁用URL,返回403HTTP状态码。 G(force URL to be gone) 强制URL为GONE，返回410HTTP状态码。 P(force proxy) 强制使用代理转发。 L(last rule) 表明当前规则是最后一条规则，停止分析以后规则的重写。 N(next round) 重新从第一条规则开始运行重写过程。 C(chained with next rule) 与下一条规则关联 如果规则匹配则正常处理，该标志无效，如果不匹配，那么下面所有关联的规则都跳过。 T=MIME-type(force MIME type) 强制MIME类型 NS (used only if no internal sub-request) 只用于不是内部子请求 NC(no case) 不区分大小写 QSA(query string append) 追加请求字符串 NE(no URI [...]]]></description>
			<content:encoded><![CDATA[<p>Apache的rewrite的重写非常常用,现总结如下.</p>
<p><strong>Apache mod_rewrite规则重写的标志一览</strong></p>
<p><strong>R</strong>[=code](force redirect) 强制外部重定向<br />
强制在替代字符串加上http://thishost[:thisport]/前缀重定向到外部的URL.如果code不指定，将用缺省的302 HTTP状态码。<span id="more-42"></span><br />
<strong>F</strong>(force URL to be forbidden)禁用URL,返回403HTTP状态码。<br />
<strong>G</strong>(force URL to be gone) 强制URL为GONE，返回410HTTP状态码。<br />
<strong>P</strong>(force proxy) 强制使用代理转发。<br />
<strong>L</strong>(last rule) 表明当前规则是最后一条规则，停止分析以后规则的重写。<br />
<strong>N</strong>(next round) 重新从第一条规则开始运行重写过程。<br />
<strong>C</strong>(chained with next rule) 与下一条规则关联<br />
如果规则匹配则正常处理，该标志无效，如果不匹配，那么下面所有关联的规则都跳过。<br />
<strong>T</strong>=MIME-type(force MIME type) 强制MIME类型<br />
<strong>NS</strong> (used only if no internal sub-request) 只用于不是内部子请求<br />
<strong>NC</strong>(no case) 不区分大小写<br />
<strong>QSA</strong>(query string append) 追加请求字符串<br />
<strong>NE</strong>(no URI escaping of output) 不在输出转义特殊字符<br />
例如：RewriteRule /foo/(.*) /bar?arg=P1\%3d$1 [R,NE] 将能正确的将/foo/zoo转换成/bar?arg=P1=zed<br />
<strong>PT</strong>(pass through to next handler) 传递给下一个处理<br />
例如：<br />
RewriteRule ^/abc(.*) /def$1 [PT] # 将会交给/def规则处理<br />
Alias /def /ghi<br />
<strong>S</strong>=num(skip next rule(s)) 跳过num条规则<br />
<strong>E</strong>=VAR:VAL(set environment variable) 设置环境变量</p>
<p><strong>使用mod_rewrite时常用的服务器变量：</strong><br />
HTTP headers:HTTP_USER_AGENT, HTTP_REFERER, HTTP_COOKIE, HTTP_HOST, HTTP_ACCEPT<br />
connection &amp; request: REMOTE_ADDR, QUERY_STRING<br />
server internals: DOCUMENT_ROOT, SERVER_PORT, SERVER_PROTOCOL<br />
system stuff: TIME_YEAR, TIME_MON, TIME_DAY</p>
<p><strong>RewriteRule规则表达式的说明：</strong><br />
. 匹配任何单字符<br />
[chars] 匹配字符串:chars<br />
[^chars] 不匹配字符串:chars<br />
text1|text2 可选择的字符串:text1或text2<br />
? 匹配0到1个字符<br />
* 匹配0到多个字符<br />
+ 匹配1到多个字符<br />
^ 字符串开始标志<br />
$ 字符串结束标志<br />
\n 转义符标志</p>
<p>反向引用 $N 用于 RewriteRule 中匹配的变量调用(0 &lt;= N &lt;= 9)<br />
反向引用 %N 用于 RewriteCond 中最后一个匹配的变量调用(1 &lt;= N &lt;= 9)</p>
<p><strong>RewriteCond适用的标志符</strong><br />
‘nocase|NC’ (no case)忽略大小<br />
‘ornext|OR’ (or next condition)逻辑或，可以同时匹配多个RewriteCond条件</p>
<p><strong>RewriteRule适用的标志符</strong><br />
‘redirect|R [=code]’ (force redirect)强迫重写为基于http开头的外部转向(注意URL的变化) 如：[R=301,L]<br />
‘forbidden|F’ (force URL to be forbidden)重写为禁止访问<br />
‘proxy|P’ (force proxy)重写为通过代理访问的http路径<br />
‘last|L’ (last rule)最后的重写规则标志，如果匹配，不再执行以后的规则<br />
‘next|N’ (next round)循环同一个规则，直到不能满足匹配<br />
‘chain|C’ (chained with next rule)如果匹配该规则，则继续下面的有Chain标志的规则。<br />
‘type|T=MIME-type’ (force MIME type)指定MIME类型<br />
‘nosubreq|NS’ (used only if no internal sub-request)如果是内部子请求则跳过<br />
‘nocase|NC’ (no case)忽略大小<br />
‘qsappend|QSA’ (query string append)附加查询字符串<br />
‘noescape|NE’ (no URI escaping of output)禁止URL中的字符自动转义成%[0-9]+的形式。<br />
‘passthrough|PT’ (pass through to next handler)将重写结果运用于mod_alias<br />
’skip|S=num’ (skip next rule(s))跳过下面几个规则<br />
‘env|E=VAR:VAL’ (set environment variable)添加环境变量</p>
<p><strong>实战</strong><br />
例子：<br />
RewriteEngine on<br />
RewriteCond %{HTTP_USER_AGENT} ^MSIE [NC,OR]<br />
RewriteCond %{HTTP_USER_AGENT} ^Opera [NC]<br />
RewriteRule ^.* &#8211; [F,L] 这里”-”表示没有替换，浏览器为IE和Opera的访客将被禁止访问。</p>
<p>例子：<br />
RewriteEngine On<br />
RewriteBase /test<br />
RewriteCond %{REQUEST_FILENAME}.php -f<br />
RewriteRule ([^/]+)$ /test/$1.php<br />
#for example: /test/admin =&gt; /test/admin.php<br />
RewriteRule ([^/]+)\.html$ /test/$1.php [L]<br />
#for example: /test/admin.html =&gt; /test/admin.php</p>
<p>限制目录只能显示图片<br />
&lt; IfModule mod_rewrite.c&gt;<br />
RewriteEngine on<br />
RewriteCond %{REQUEST_FILENAME} !^.*\.(gif|jpg|jpeg|png|swf)$<br />
RewriteRule .*$ &#8211; [F,L]<br />
&lt; /IfModule&gt;</p>
<div id="seo_alrp_related"><h2>Posts Related to Apache的rewrite的重写相关的参数</h2><ul><li><div class="seo_alrp_rl_content"><h3><a href="http://www.st-winthink.com/index.php/43.html" rel="bookmark">Apache中 RewriteCond 规则参数介绍</a></h3><p>Apache中 RewriteCond语句对于我来说一直是个难点，多次试图去把它搞明白，都没有结构，这次我终于算大概知道它的意思了。 RewriteCond就像我们程序中的if语句一样，表示如果符合某个或某几个条件则执行RewriteCond下面紧邻的RewriteRule语句，这就是RewriteCond最原始、基础的功能，为了方便理解，下面来看看几个例子。 RewriteEngine on RewriteCond  %{HTTP_USER_AGENT}  ^Mozilla\/5\.0.* RewriteRule  index.php            index.m.php RewriteCond  %{HTTP_USER_AGENT}  ^Lynx.* RewriteRule  index.php            index.L.php RewriteRule  index.php            index.b.php 上面语句的作用是当你是用FF浏览器访问index.php这个文件的时候，会自动让你访问到index.m.php这个文件，当你是用一些移动终端访问的时候，会让你对index.php这个文件的访问实际访问的是index.L.php去，如果你是用其它的浏览器访问的时候，会让你跳到 index.b.php。在说形象一点，上面的语句就等同于程序里面的下面语句(依PHP语句为例): if($_SERVER['HTTP_USER_AGENT'] == 'Mozilla/5.0') { //跳转到对index.m.php的访问 } else if($_SERVER['HTTP_USER_AGENT'] == 'Lynx') { //跳转到对index.L.php的访问 } ...</p></div></li><li><div class="seo_alrp_rl_content"><h3><a href="http://www.st-winthink.com/index.php/46.html" rel="bookmark">图片加水印, 生成缩略图类</a></h3><p>使用方法. // 原始图片 $img1 = './image/test.jpg'; // 水印后的图片 $img2 = './image/test_new.jpg'; // 水印 $water = './image/water.gif'; $img = new image(); // 等比缩放 $img-&gt;param($img1)-&gt;thumb('./image/test_0.jpg', 200,200,0); // ...</p></div></li><li><div class="seo_alrp_rl_content"><h3><a href="http://www.st-winthink.com/index.php/24.html" rel="bookmark">WP-Syntax Usage</a></h3><p>WP-Syntax WP-Syntax provides clean syntax highlighting for embedding source code within pages or posts. * Description * Installation * Faq * Screenshots * Other Notes ...</p></div></li><li><div class="seo_alrp_rl_content"><h3><a href="http://www.st-winthink.com/index.php/20.html" rel="bookmark">IE条件注释与CSS Hacks</a></h3><p>我们知道，IE6的存在，因其预装于目前市场占有率最大的 Windows XP 操作系统。对于老态龙钟的IE6，说拜拜还需要很长的时间。 IE虽然给我们网页设计师，带来了不少多麻烦，还好，IE条件注释，给我们解决浏览器兼容问题带来了一个很好的方法。 一、什么是IE条件注释？ IE条件注释，顾名思义就是使用IE特有的条件语句来显示代码块。 这些巧妙的逻辑片段只能被IE浏览器所支持，其它的浏览器理解为纯粹的HTML注释，不起任何作用。条件注释在IE5中首次出现，并且得到了Widnows浏览器所有后续版本的支持。IE条件注释及其有效，而且非常容易记住。通过这些技巧，我们可以为基于Windows的IE5、6、7、8添加一些特殊的行为。这样做的好处是，HTML和CSS代码可以通过验证。主要的缺点是这些注释需要放在HTML页面中，而不是放在CSS中。这样，当你不需要这些东西，或者有所更改的时候，就需要维护很多的地方。好处是通过这种方式使用条件注释，可以很轻松的管理项目中的目标浏览器，并使得CSS补丁文件保持独立自由。更重要的是它帮助我们优化了 CSS样式表，保证了主要样式表的干净，这对于大型网站来说就很重要了，也许你还没有感觉到它的可爱之处。 作为有Web标准意识的开发者，我们始终应该首先在大部分现有的兼容标准的浏览器上测试我们的设计，然后再为那些稍作细微修改就能回到正轨的浏览器提供补丁。 二、条件注释使用方法 条件注释属性 gt : greater than，选择条件版本以上版本，不包含条件版本 lt : less than，选择条件版本以下版本，不包含条件版本 gte : greater than or ...</p></div></li><li><div class="seo_alrp_rl_content"><h3><a href="http://www.st-winthink.com/index.php/44.html" rel="bookmark">禁止右键及查看源代码的方法</a></h3><p>一些禁止查看源文件的脚本，用在网页中，能起到防止别人复制等效果，但是也可以通过其他办法看到源代码，或是复制里面的内容。下面的方法都是一些基本的 js脚本，简单的用用就行了，真正能防到什么程序，谁也不好说。有句话说的好，真正做的好的页面，就不怕被人仿、复制、看，本来互联网就是个开放的嘛。 锁定右键 将网页中的换为如下代码即可： &lt;body oncontextmenu="return false" ondragstart="return false" onselectstart ="return false" onselect="document.selection.empty()" oncopy="document.selection.empty()" onbeforecopy="return false" onmouseup="document.selection.empty()"&gt; 拒绝另存 在和之间加入如下代码： &lt;noscript&gt;&lt;iframe src="/防止被别人框架~~~~~~~~~~~~~~~ &lt;SCRIPT language=javascript&gt; if (top.location != self.location){top.location=self.location; } &lt;/SCRIPT&gt; ~~~~~~~~~~~~~~~~~~~~~~~~~~ 取消选取、防止复制 &lt;SCRIPT language=JavaScript&gt; window.ClearEvent=function(){event.cancelBubble=false;var sSrcTagName=event.srcElement.tagName.toLowerCase(); return (sSrcTagName=="textarea" || sSrcTagName=="input" || sSrcTagName=="select");} window.ClearKey=function(){event.cancelBubble=false;var iKeyCode=event.keyCode;return !(iKeyCode==78 &amp;&amp; event.ctrlKey);} with (window.document){oncontextmenu=onselectstart=ondragstart=window.ClearEvent;onkeydown=window.ClearKey;} &lt;/SCRIPT&gt; &lt;BODY oncontextmenu=self.event.returnValue=false onselectstart="return false"&gt; &lt;body onselectstart="return false"&gt; 不准粘贴 onpaste="return false" 防止复制 oncopy="return false;" oncut="return false;" ...</p></div></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.st-winthink.com/index.php/42.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress安全:正确设置WordPress的目录/文件权限</title>
		<link>http://www.st-winthink.com/index.php/41.html</link>
		<comments>http://www.st-winthink.com/index.php/41.html#comments</comments>
		<pubDate>Mon, 07 Mar 2011 08:37:58 +0000</pubDate>
		<dc:creator>管理员</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.st-winthink.com/?p=41</guid>
		<description><![CDATA[在各式各样的网络攻击手段层出不穷的今天，如何将恶意攻击者拒之门外，保证Web服务器的安全便成了网站能够稳定地提供服务的最基本保障。当然，网络与服务器安全是一个很大的话题，相对而言，一般性的博客网站也很难成为网络攻击者的目标，但若由此便掉以轻心则显然是不智的，毕竟，如今网络攻击的门槛越来越低，即使一个懵懵懂懂的小P孩使用随处可以找到的攻击工具也可能对我们的网站带来事实上的伤害。 那么，应如何保证我们基于WordPress博客的安全呢？ 这一方面要求我们在为博客选择虚拟主机时考虑主机商的硬件设备与技术能力，确定其是否能够稳定地抵御绝大多数的网络攻击，另一方面，也需要我们正确地设置Web服务器中的目录/文件权限，不给恶意攻击者可乘之机。 从理论上来说，要保证Web服务器的安全，最简单的办法便是赋予文件最低的操作权限，比如说所有文件均为只读，而不可写不可执行，这样，攻击者便会无从下手。但在实际应用中，情况并非这么简单，以使用WordPress搭建的博客网站来说，必须赋予某些文件的可写、可执行权限，因为WordPress自身在运行过程中需要存取、修改某些文件才能实现网站的服务功能。 对Wordpress目录/文件权限的设置，实际上就是在网站的可用性、易用性与安全性之间寻得一个恰当的平衡。下面我们具体来讨论一下(以Linux/Apache平台、WordPress位于网站根目录为例)： “/wp-admin/”： WordPress管理目录，其中的所有文件应该只赋予所有者可写权限； “/wp-includes/”：WordPress 支持库目录，其中的所有文件应该只赋予所有者可写权限； “/wp-content/”：这个目录下的文件权限设置相对复杂了些，让我们分别来看： “/wp-content/themes/”：对于WordPress主题目录下的文件，如果您从不使用WordPress内置的主题编辑器，那么可以简单地设置其仅允许所有者可写；当然，对大部分朋友来说，可能常常需要修改主题如css、模板文件等，这就应赋予这些文件Apache运行用户（一般为nobody）所在组的可写权限。 而“/wp-content/plugins/”目录下存放的插件文件，同样也需视情况而定，一般而言，大部分插件可以只赋予所有者可写权限，但同样也存在部分插件需赋予Apache运行用户（一般为nobody）所在组的可写权限。 而如果要使用WordPress内置的Database Backup插件，则需要将整个“/wp-content/”目录赋予可写的权限，一般为755，在某些主机设置中甚至可能需要更高的777。 “/”：WordPress根目录，应该只赋予所有者可写权限；不过，如果您的博客使用Permalinks，需要WordPress来自动生成、应用rewrite规则，则必须赋予Apache 对“.htaccess”的操作权限。此外，如其中内含连接wordpress 数据库的用户名与密码的“wp-config.php”，则应赋予更严格的操作控制，禁止遍历，极端情况下可直接将其设为600。 Posts Related to WordPress安全:正确设置WordPress的目录/文件权限清理禁用WordPress日志的修订版，给wordpress数据库减肥使用wordpress的朋友可能已发现，我们可爱的wordpress有一个功能：写文章时，系统会自动保存文章历史版本。 即当我们新建文章或 者修改文章时，如果长时间没有点击“发布”或者“更新文章”，系统会每隔一定时间自动保存当前内容为文章历史版本，以防万一。当某个页面需要经常修改、经 常更新，长时间会发现下面的文章历史版本相当多，几十个。冗余的记录比真正用到的记录足足多了几倍，这对网站的性能明显会带来或多或少的影响。不否认修改 版具有一定的用处，但是对我来说这用处几乎是零…… 很明显，我会把这些冗余记录删掉。 要清理这些wordpress自动保存的文章历史版本，直接在后台操作貌似不行。怎么办？直接从数据库中删掉便是(删除前记得备份下数据库……)，方法如下： 登录数据库，可使用phpMyAdmin 找到要操作的对象——wordpress数据库中的”blog_posts”表。浏览该表，找到”post_type”项，发现其中有”revision” 删除”blog_post”中”post_type”项标识为”revision”的数据 直接使用SQL语句也可： DELETE FROM wp_posts WHERE post_type = 'revision'; 貌似这是一个最傻的做法，你总不能三天两头的就登录一下PHPMYADMIN去清理这些修订版吧，那么是否有更好的办法呢？ 当然答案是肯定的，有更好的方法来解决这个问题。 在wp-config.php里的添加如下代码： /** 禁用修订版本功能. */ define('WP_POST_REVISIONS', ...WP-Syntax UsageWP-Syntax WP-Syntax provides clean syntax highlighting for embedding source [...]]]></description>
			<content:encoded><![CDATA[<p>在各式各样的网络攻击手段层出不穷的今天，如何将恶意攻击者拒之门外，保证Web服务器的安全便成了网站能够稳定地提供服务的最基本保障。当然，网络与服务器安全是一个很大的话题，相对而言，一般性的博客网站也很难成为网络攻击者的目标，但若由此便掉以轻心则显然是不智的，毕竟，如今网络攻击的门槛越来越低，即使一个懵懵懂懂的小P孩使用随处可以找到的攻击工具也可能对我们的网站带来事实上的伤害。</p>
<p>那么，应如何保证我们基于WordPress博客的安全呢？<span id="more-41"></span></p>
<p>这一方面要求我们在为博客选择虚拟主机时考虑主机商的硬件设备与技术能力，确定其是否能够稳定地抵御绝大多数的网络攻击，另一方面，也需要我们正确地设置Web服务器中的目录/文件权限，不给恶意攻击者可乘之机。</p>
<p>从理论上来说，要保证Web服务器的安全，最简单的办法便是赋予文件最低的操作权限，比如说所有文件均为只读，而不可写不可执行，这样，攻击者便会无从下手。但在实际应用中，情况并非这么简单，以使用WordPress搭建的博客网站来说，必须赋予某些文件的可写、可执行权限，因为WordPress自身在运行过程中需要存取、修改某些文件才能实现网站的服务功能。</p>
<p>对Wordpress目录/文件权限的设置，实际上就是在网站的可用性、易用性与安全性之间寻得一个恰当的平衡。下面我们具体来讨论一下(以Linux/Apache平台、WordPress位于网站根目录为例)：</p>
<li style="padding-left: 30px;">“/wp-admin/”： WordPress管理目录，其中的所有文件应该只赋予所有者可写权限；</li>
<li style="padding-left: 30px;"> “/wp-includes/”：WordPress 支持库目录，其中的所有文件应该只赋予所有者可写权限；</li>
<li style="padding-left: 30px;">“/wp-content/”：这个目录下的文件权限设置相对复杂了些，让我们分别来看：
<ul>
<li>“/wp-content/themes/”：对于WordPress主题目录下的文件，如果您从不使用WordPress内置的主题编辑器，那么可以简单地设置其仅允许所有者可写；当然，对大部分朋友来说，可能常常需要修改主题如css、模板文件等，这就应赋予这些文件Apache运行用户（一般为nobody）所在组的可写权限。</li>
<li>而“/wp-content/plugins/”目录下存放的插件文件，同样也需视情况而定，一般而言，大部分插件可以只赋予所有者可写权限，但同样也存在部分插件需赋予Apache运行用户（一般为nobody）所在组的可写权限。</li>
<li>而如果要使用WordPress内置的Database Backup插件，则需要将整个“/wp-content/”目录赋予可写的权限，一般为755，在某些主机设置中甚至可能需要更高的777。</li>
</ul>
</li>
<li style="padding-left: 30px;">“/”：WordPress根目录，应该只赋予所有者可写权限；不过，如果您的博客使用Permalinks，需要WordPress来自动生成、应用rewrite规则，则必须赋予Apache 对“.htaccess”的操作权限。此外，如其中内含连接wordpress 数据库的用户名与密码的“wp-config.php”，则应赋予更严格的操作控制，禁止遍历，极端情况下可直接将其设为600。</li>
<div id="seo_alrp_related"><h2>Posts Related to WordPress安全:正确设置WordPress的目录/文件权限</h2><ul><li><div class="seo_alrp_rl_content"><h3><a href="http://www.st-winthink.com/index.php/18.html" rel="bookmark">清理禁用WordPress日志的修订版，给wordpress数据库减肥</a></h3><p>使用wordpress的朋友可能已发现，我们可爱的wordpress有一个功能：写文章时，系统会自动保存文章历史版本。 即当我们新建文章或 者修改文章时，如果长时间没有点击“发布”或者“更新文章”，系统会每隔一定时间自动保存当前内容为文章历史版本，以防万一。当某个页面需要经常修改、经 常更新，长时间会发现下面的文章历史版本相当多，几十个。冗余的记录比真正用到的记录足足多了几倍，这对网站的性能明显会带来或多或少的影响。不否认修改 版具有一定的用处，但是对我来说这用处几乎是零…… 很明显，我会把这些冗余记录删掉。 要清理这些wordpress自动保存的文章历史版本，直接在后台操作貌似不行。怎么办？直接从数据库中删掉便是(删除前记得备份下数据库……)，方法如下： 登录数据库，可使用phpMyAdmin 找到要操作的对象——wordpress数据库中的”blog_posts”表。浏览该表，找到”post_type”项，发现其中有”revision” 删除”blog_post”中”post_type”项标识为”revision”的数据 直接使用SQL语句也可： DELETE FROM wp_posts WHERE post_type = 'revision'; 貌似这是一个最傻的做法，你总不能三天两头的就登录一下PHPMYADMIN去清理这些修订版吧，那么是否有更好的办法呢？ 当然答案是肯定的，有更好的方法来解决这个问题。 在wp-config.php里的添加如下代码： /** 禁用修订版本功能. */ define('WP_POST_REVISIONS', ...</p></div></li><li><div class="seo_alrp_rl_content"><h3><a href="http://www.st-winthink.com/index.php/24.html" rel="bookmark">WP-Syntax Usage</a></h3><p>WP-Syntax WP-Syntax provides clean syntax highlighting for embedding source code within pages or posts. * Description * Installation * Faq * Screenshots * Other Notes ...</p></div></li><li><div class="seo_alrp_rl_content"><h3><a href="http://www.st-winthink.com/index.php/39.html" rel="bookmark">玩转WordPress配置文件 (wp-config.php使用技巧分享)</a></h3><p>WordPress用户都知道，wp-config.php 文件是WordPress数据库的关键。数据库名、用户名、密码、位置都是在此设置。 但是很多用户并不知道通过wp-config.php文件可以更改很多设置，提高WordPress站点的功能、性能、安全度。在这里，这里跟大家分享下使用wp-config.php的技巧。 数据库信息 WordPress链接数据库需设定以下四个值: define('DB_NAME', 'database-name'); define('DB_USER', 'database-username'); define('DB_PASSWORD', 'database-password'); define('DB_HOST', 'localhost'); 在创建数据库前就需准备好数据库名称、用户名、密码，最后一个DB_HOST值可能比较难获得，最常见的是直接用“localhost”， 甚至你可以给数据库服务器指定一个备用端口。例如： define('DB_HOST', 'localhost:1234'); define('DB_HOST', 'mysql.domain.tld:1234'); 还有一种更好的方法就是自动检测数据库服务器值： define('DB_HOST', $_ENV{DATABASE_SERVER}); 如果上面所有方法都行不通，求助你的服务器提供商。 数据库字符集和整理(collation) 截至WordPress ...</p></div></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.st-winthink.com/index.php/41.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>玩转WordPress配置文件 (wp-config.php使用技巧分享)</title>
		<link>http://www.st-winthink.com/index.php/39.html</link>
		<comments>http://www.st-winthink.com/index.php/39.html#comments</comments>
		<pubDate>Sat, 29 Jan 2011 14:26:37 +0000</pubDate>
		<dc:creator>管理员</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.st-winthink.com/?p=39</guid>
		<description><![CDATA[WordPress用户都知道，wp-config.php 文件是WordPress数据库的关键。数据库名、用户名、密码、位置都是在此设置。

但是很多用户并不知道通过wp-config.php文件可以更改很多设置，提高WordPress站点的功能、性能、安全度。在这里，这里跟大家分享下使用wp-config.php的技巧。]]></description>
			<content:encoded><![CDATA[<p>WordPress用户都知道，wp-config.php 文件是WordPress数据库的关键。数据库名、用户名、密码、位置都是在此设置。</p>
<p>但是很多用户并不知道通过wp-config.php文件可以更改很多设置，提高WordPress站点的功能、性能、安全度。在这里，这里跟大家分享下使用wp-config.php的技巧。</p>
<h3>数据库信息<span id="more-39"></span></h3>
<p>WordPress链接数据库需设定以下四个值:</p>
<blockquote><p>define(&#8216;DB_NAME&#8217;, &#8216;database-name&#8217;);<br />
define(&#8216;DB_USER&#8217;, &#8216;database-username&#8217;);<br />
define(&#8216;DB_PASSWORD&#8217;, &#8216;database-password&#8217;);<br />
define(&#8216;DB_HOST&#8217;, &#8216;localhost&#8217;);</p></blockquote>
<p>在创建数据库前就需准备好数据库名称、用户名、密码，最后一个DB_HOST值可能比较难获得，最常见的是直接用“localhost”， 甚至你可以给数据库服务器指定一个备用端口。例如：</p>
<blockquote><p>define(&#8216;DB_HOST&#8217;, &#8216;localhost:1234&#8242;);</p>
<p>define(&#8216;DB_HOST&#8217;, &#8216;mysql.domain.tld:1234&#8242;);</p></blockquote>
<p>还有一种更好的方法就是自动检测数据库服务器值：</p>
<blockquote><p>define(&#8216;DB_HOST&#8217;, $_ENV{DATABASE_SERVER});</p></blockquote>
<p>如果上面所有方法都行不通，求助你的服务器提供商。</p>
<h3>数据库字符集和整理(collation)</h3>
<p>截至WordPress 2.2版，你可以给MySQL数据库指定字符集。一般来说，不需要修改默认字符集UTF-8，因为它支持所有的语言。注意，如果wp-config.php文件里，这一字符集已经存在，你只能使用此字符集。下面是默认的设置，也是我推荐大家使用的设置：</p>
<blockquote><p>define(&#8216;DB_CHARSET&#8217;, &#8216;utf8&#8242;);</p></blockquote>
<p>WordPress 2.2 版本还可以指定collation（校勘/整理），对你的数据库字符集排序。Collation的设置通常由MySQL依据字符集自动处理的，在默认设置里的collation值保留空白就可以。默认的设置：</p>
<blockquote><p>define(&#8216;DB_COLLATE&#8217;, ”);</p></blockquote>
<h3>安全密匙</h3>
<p>截至WordPress 2.7后有四个安全密匙来加密cookies。这些密匙只需让它默默无闻地工作就好，并尽可能随意和复杂（你无需记住）。生成这些密匙的最简单方法就是通过WordPress官方密匙服务来自动生成。只要点击这个服务，复制并粘贴生成的结果到wp-config.php 文件中即可。注意，这些密匙可随时更改，这样一来，用户之前的cookies会被清除需要重新登陆你的网站。</p>
<blockquote><p>define(&#8216;AUTH_KEY&#8217;, &#8216;:dr+%/5V4sAUG-gg%aS*v;&amp;xGhd%{YV)p:Qi?jXLq,&lt;h\\`39&#8242;);<br />
define(&#8216;SECURE_AUTH_KEY&#8217;, &#8216;@*+S=8\”\&#8217;+\”}]&lt;m#+}V)p:Qi?jXLq,&lt;h\\`39m_(&#8216;);<br />
define(&#8216;LOGGED_IN_KEY&#8217;, &#8216;S~AACm4h1;T^\”qW3_8Zv!Ji=y|)~5i63JI |Al[(&lt;YS');<br />
define('NONCE_KEY', 'k1+EOc-&amp;w?hG8j84&gt;6L9v\"6C89NH?ui{*3\\(t09mumL/fF');</p></blockquote>
<h3>数据库前缀</h3>
<p>数据库前缀的设置对提高你的站点安全以及在同一数据库中安装多个WordPress站点都非常有用，通过改变默认值“wp_” 为随机独一的值，可减轻站点受攻击的可能性，总体上提高你的网站安全性。下面是默认值：</p>
<blockquote><p>$table_prefix = 'wp_';</p></blockquote>
<p>有很多攻击者就是对准这些默认前缀的数据库进行攻击。稍微修改为如： “x777_”之类的可避免此类攻击。</p>
<p>你还可以使用此设置实现在一个数据库中安装多个WordPress站点，只要给每一个WordPress指定一个单独的数据库前缀即可：</p>
<blockquote><p>$table_prefix = 'wp1_'; // 第一个博客<br />
$table_prefix = 'wp2_'; // 第二个博客<br />
$table_prefix = 'wp3_'; // 第三个博客</p></blockquote>
<h3>语言设置</h3>
<p>WordPress可指定一个语言翻译文件及其相关的目录。语言翻译文件属于 “.mo” 这一类别，其默认位置是 (如果没有明确指定的路径) wp-content/languages (第一)和wp-includes/languages (第二)。下面是默认设置：</p>
<blockquote><p>define('WPLANG', '');<br />
define('LANGDIR', '');</p></blockquote>
<h3>目录设置</h3>
<p>技术上来说，你不太需要关注它。默认的wp-config.php 文件里有几行指定绝对路径并且包含设置文件。我这里提出来，只是为了使这篇文章更完整些：</p>
<blockquote><p>/** WordPress absolute path to the WordPress directory. */<br />
if ( !defined('ABSPATH') )<br />
define('ABSPATH', dirname(__FILE__) . '/');</p>
<p>/** Sets up WordPress vars and included files. */<br />
require_once(ABSPATH . 'wp-settings.php');</p></blockquote>
<h3>博客地址和网站地址</h3>
<p>默认的p-config.php中不包含这两个定义，不过为了改善WordPress的性能，还是需要添加的。这两个设置是在2.2版本引进来的。在wp-config.php 中添加者两个定义可降低数据库查询数，提高网站的运行。这些设置需与你的WordPress Admin中的设置一致。下面是一个例子 (所有URL地址不以斜线结尾):</p>
<blockquote><p>define('WP_HOME', 'http://digwp.com');<br />
define('WP_SITEURL', 'http://digwp.com');</p></blockquote>
<p>可以使用全局变量动态地设置这些值：</p>
<blockquote><p>define('WP_HOME', 'http://'.$_SERVER['HTTP_HOST'].&#8217;/path/to/wordpress&#8217;);<br />
define(&#8216;WP_SITEURL&#8217;, &#8216;http://&#8217;.$_SERVER['HTTP_HOST'].&#8217;/path/to/wordpress&#8217;);</p></blockquote>
<h3>模板路径和样式表路径</h3>
<p>设定好博客地址和网站地址后，你还可以通过剔除对模板路径和样式表路径的数据库查询，这样可提高站点的性能。下面是默认的值:</p>
<blockquote><p>define(&#8216;TEMPLATEPATH&#8217;, get_template_directory());<br />
define(&#8216;STYLESHEETPATH&#8217;, get_stylesheet_directory());</p></blockquote>
<p>尽管数据库查询还存在，但我们可以减少多余的查询:</p>
<blockquote><p>define(&#8216;TEMPLATEPATH&#8217;, &#8216;/absolute/path/to/wp-content/themes/active-theme&#8217;);<br />
define(&#8216;STYLESHEETPATH&#8217;, &#8216;/absolute/path/to/wp-content/themes/active-theme&#8217;);</p></blockquote>
<h3>禁用缓存和缓存有效期</h3>
<p>这两个都是针对旧版本的WordPress，还在使用默认的基于对象的缓存机制。第一个选项是启用或禁用缓存。第二个定义让你指定缓存的到期时间。<br />
启用缓存</p>
<blockquote><p>define(&#8216;WP_CACHE&#8217;, true); // 启用缓存<br />
define(&#8216;ENABLE_CACHE&#8217;, true); // 启用缓存<br />
define(&#8216;CACHE_EXPIRATION_TIME&#8217;, 3600); // 单位秒</p></blockquote>
<p>禁用缓存</p>
<blockquote><p>define(&#8216;WP_CACHE&#8217;, false); //禁用缓存<br />
define(&#8216;DISABLE_CACHE&#8217;, true); // 禁用缓存</p></blockquote>
<h3>指定cookies域</h3>
<p>会由于很多原因你需要给站点指定cookies域。比较常见的就是阻止子域名上请求静态内容的cookies不必要的传输。这种情况下，你就可以使用此定义告知WordPress只向非静态域发送cookies，这将会大大提高网站的性能。下面是设置各种cookies路径和域的信息：</p>
<blockquote><p>define(&#8216;COOKIE_DOMAIN&#8217;, &#8216;.digwp.com&#8217;); // 别漏了前面的&#8217;.'。<br />
define(&#8216;COOKIEPATH&#8217;, preg_replace(&#8216;|https?://[^/]+|i&#8217;, ”, get_option(&#8216;home&#8217;).&#8217;/'));<br />
define(&#8216;SITECOOKIEPATH&#8217;, preg_replace(&#8216;|https?://[^/]+|i&#8217;, ”, get_option(&#8216;siteurl&#8217;).&#8217;/'));<br />
define(&#8216;PLUGINS_COOKIE_PATH&#8217;, preg_replace(&#8216;|https?://[^/]+|i&#8217;, ”, WP_PLUGIN_URL));<br />
define(&#8216;ADMIN_COOKIE_PATH&#8217;, SITECOOKIEPATH.&#8217;wp-admin&#8217;);</p></blockquote>
<h3>覆盖文件权限</h3>
<p>如果你的虚拟主机默认文件权限非常严格，在WordPress配置文件里添加这些定义就可以解决这个问题。注意，数值不需要用引号引起来。下面是例子：</p>
<blockquote><p>define(&#8216;FS_CHMOD_FILE&#8217;, 0755);<br />
define(&#8216;FS_CHMOD_DIR&#8217;, 0755);</p></blockquote>
<h3>查看所有已定义的常量</h3>
<p>需要查看所有已定义的常量吗？用下面的PHP函数就会得到一个所有当前一定义常数的数组：</p>
<blockquote><p>print_r(@get_defined_constants());</p></blockquote>
<h3>自定义用户和usermeta 表</h3>
<p>你也可以通过下面的定义自定义用户和usermeta表：</p>
<blockquote><p>define(&#8216;CUSTOM_USER_TABLE&#8217;, $table_prefix.&#8217;my_users&#8217;);<br />
define(&#8216;CUSTOM_USER_META_TABLE&#8217;, $table_prefix.&#8217;my_usermeta&#8217;);</p></blockquote>
<h3>FTP/SSH常量</h3>
<p>这类定义是用于帮助用户定位和实现FTP/SSH连接。下面是例子:</p>
<blockquote><p>define(&#8216;FS_METHOD&#8217;, &#8216;ftpext&#8217;); // 文件系统的方式，包括： “direct”、”ssh”、”ftpext”和”ftpsockets”<br />
define(&#8216;FTP_BASE&#8217;, &#8216;/path/to/wordpress/&#8217;); // 安装根目录的绝对路径<br />
define(&#8216;FTP_CONTENT_DIR&#8217;, &#8216;/path/to/wordpress/wp-content/&#8217;); // 到”wp-content” 目录的绝对路径<br />
define(&#8216;FTP_PLUGIN_DIR &#8216;, &#8216;/path/to/wordpress/wp-content/plugins/&#8217;); // 到”wp-plugins” 目录的绝对路径<br />
define(&#8216;FTP_PUBKEY&#8217;, &#8216;/home/username/.ssh/id_rsa.pub&#8217;); // 到SSH公匙的绝对路径<br />
define(&#8216;FTP_PRIVKEY&#8217;, &#8216;/home/username/.ssh/id_rsa&#8217;); //到SSH密匙的绝对路径<br />
define(&#8216;FTP_USER&#8217;, &#8216;username&#8217;); // FTP 或SSH用户名<br />
define(&#8216;FTP_PASS&#8217;, &#8216;password&#8217;); // FTP用户密码<br />
define(&#8216;FTP_HOST&#8217;, &#8216;ftp.domain.tld:21&#8242;); //主机名:你的SSH/FTP服务器端口</p></blockquote>
<h3>移动wp-content 目录</h3>
<p>从2.6版本开始，你可以修改wp-content目录的位置。这么做有几个理由，包括可提高网站的安全性，以及便于FTP更新。下面是例子：</p>
<blockquote><p>// 当前目录的完全本地路径(结尾不包括斜杠)<br />
define(&#8216;WP_CONTENT_DIR&#8217;, $_SERVER['DOCUMENT_ROOT'].&#8217;/path/wp-content&#8217;);</p>
<p>// 当前目录的完整URL(结尾不包括斜杠)<br />
define(&#8216;WP_CONTENT_URL&#8217;, &#8216;http://domain.tld/path/wp-content&#8217;);</p></blockquote>
<p>你也可以另外给wp-content 目录指定一个自定义路径。可以解决一些插件的兼容性问题：</p>
<blockquote><p>//当前目录的完全本地路径(结尾不包括斜杠)<br />
define(&#8216;WP_PLUGIN_DIR&#8217;, $_SERVER['DOCUMENT_ROOT'].&#8217;/path/wp-content/plugins&#8217;);</p>
<p>//当前目录的完整URL(结尾不包括斜杠)<br />
define(&#8216;WP_PLUGIN_URL&#8217;, &#8216;http://domain.tld/path/wp-content/plugins&#8217;);</p></blockquote>
<h3>日志修订版的处理</h3>
<p>Worepress最新版本提供了一个发布后修改系统，用户可保存不同的博客版本，甚至，如果有需要的话，还可以恢复到先前保存的博客版本。不管你喜欢还是不喜欢这个功能，下面的设置可能都对你有帮助。</p>
<p>限制保存博客版本的数量</p>
<blockquote><p>define(&#8216;WP_POST_REVISIONS&#8217;, 3); // 任意整数，不过不要太夸张。</p></blockquote>
<p>禁用修订版功能</p>
<blockquote><p>define(&#8216;WP_POST_REVISIONS&#8217;, false);</p></blockquote>
<h3>指定自动保存间隔</h3>
<p>跟发布版本功能类似，WordPress其实使用了自动保存功能。默认情况下，WordPress每一分钟自动保存你的作品，不过你完全可以根据需要改变这个数值。不过也注意不要太夸张，以免破坏了你的服务器。</p>
<blockquote><p>define(&#8216;AUTOSAVE_INTERVAL&#8217;, 160); // 单位秒</p></blockquote>
<h3>调试WordPress</h3>
<p>自从2.3.1版本以来，有一些错误和警告提示帮助用户调试网站。截止2.5版本， 报错等级提高到E_ALL并有激活对一些函数的警告功能。默认(即，没有在wp-config.php文件中指定任何定义)，错误报告被禁用。</p>
<blockquote><p>define(&#8216;WP_DEBUG&#8217;, true); // 启用调试模式<br />
define(&#8216;WP_DEBUG&#8217;, false); // 禁用调试模式（默认）</p></blockquote>
<h3>错误日志配置</h3>
<p>下面是启用WordPress站点错误日志的一种简单方法。创建一个名为“php_error.log”的文件，使其对服务器可写，并将其放置在你选择的目录下。接着在下面代码中第三行编辑路径，并加入wp-config.php 中：</p>
<blockquote><p>@ini_set(&#8216;log_errors&#8217;,'On&#8217;);<br />
@ini_set(&#8216;display_errors&#8217;,'Off&#8217;);<br />
@ini_set(&#8216;error_log&#8217;,'/home/path/domain/logs/php_error.log&#8217;);</p></blockquote>
<h3>增加PHP内存</h3>
<p>如果你收到错误提示“允许的内存xxx字节已用尽” ，这个设置就对你有帮助了。截至WordPress的2.5版，WP_MEMORY_LIMIT定义，你可以指定PHP使用的最大内存。默认情况下，最大PHP内存是32兆，因此只有要求大于32兆是菜需要更改此设置。注意，有些虚拟主机禁止你提高PHP 内存，所以你得请求他们帮忙。下面是例子：</p>
<blockquote><p>define(&#8216;WP_MEMORY_LIMIT&#8217;, &#8217;64M&#8217;);<br />
define(&#8216;WP_MEMORY_LIMIT&#8217;, &#8217;96M&#8217;);<br />
define(&#8216;WP_MEMORY_LIMIT&#8217;, &#8217;128M&#8217;);</p></blockquote>
<h3>保存并显示数据库查询以供分析</h3>
<p>这个技术可实现保存并显示数据库查询的信息以备后面分析。这个过程保存了每一次查询、相关的函数以及总的执行时间。这些信息都保存为一个数组的形式，并可显示在任何模板页上。不过，首先得在你的wp-config.php 文件添加下面的指令：</p>
<blockquote><p>define(&#8216;SAVEQUERIES&#8217;, true);</p></blockquote>
<p>然后，在主题的footer上加上下面的代码：</p>
<blockquote><p>// 只对admin显示查询数组<br />
if (current_user_can(&#8216;level_10&#8242;)) {<br />
global $wpdb;<br />
echo “&lt;pre&gt;”;<br />
print_r($wpdb-&gt;queries);<br />
echo “&lt;/pre&gt;”;<br />
}</p></blockquote>
<p>下面是此函数的单行版本:</p>
<blockquote><p>&lt;?php if (current_user_can(&#8216;level_10&#8242;)) { global $wpdb; echo “&lt;pre&gt;”; print_r($wpdb-&gt;queries); echo “&lt;/pre&gt;”; } ?&gt;</p></blockquote>
<h3>限制代理访问</h3>
<p>WordPress 2.8及以上版本，可用配置文件定义一些常量，包括封锁、允许、过滤从一个代理服务器访问特定主机。例如，如果你的WordPress站点是联网的， 你需要阻止访问任何外部主机，只允许本地主机访问，使用下面第一个定义。如果你允许特定主机访问，用逗号分隔主机名称即可，像下面第三个定义一样。 注意，请允许api.wordpress.org访问，确保一些核心文件和插件能起到恰当的作用。</p>
<blockquote><p>define(&#8216;WP_HTTP_BLOCK_EXTERNAL&#8217;, true); // 阻止外部请求<br />
define(&#8216;WP_HTTP_BLOCK_EXTERNAL&#8217;, false); // 允许外部请求<br />
define(&#8216;WP_ACCESSIBLE_HOSTS&#8217;, &#8216;api.wordpress.org&#8217;); // 白名单主机</p></blockquote>
<div id="seo_alrp_related"><h2>Posts Related to 玩转WordPress配置文件 (wp-config.php使用技巧分享)</h2><ul><li><div class="seo_alrp_rl_content"><h3><a href="http://www.st-winthink.com/index.php/24.html" rel="bookmark">WP-Syntax Usage</a></h3><p>WP-Syntax WP-Syntax provides clean syntax highlighting for embedding source code within pages or posts. * Description * Installation * Faq * Screenshots * Other Notes ...</p></div></li><li><div class="seo_alrp_rl_content"><h3><a href="http://www.st-winthink.com/index.php/18.html" rel="bookmark">清理禁用WordPress日志的修订版，给wordpress数据库减肥</a></h3><p>使用wordpress的朋友可能已发现，我们可爱的wordpress有一个功能：写文章时，系统会自动保存文章历史版本。 即当我们新建文章或 者修改文章时，如果长时间没有点击“发布”或者“更新文章”，系统会每隔一定时间自动保存当前内容为文章历史版本，以防万一。当某个页面需要经常修改、经 常更新，长时间会发现下面的文章历史版本相当多，几十个。冗余的记录比真正用到的记录足足多了几倍，这对网站的性能明显会带来或多或少的影响。不否认修改 版具有一定的用处，但是对我来说这用处几乎是零…… 很明显，我会把这些冗余记录删掉。 要清理这些wordpress自动保存的文章历史版本，直接在后台操作貌似不行。怎么办？直接从数据库中删掉便是(删除前记得备份下数据库……)，方法如下： 登录数据库，可使用phpMyAdmin 找到要操作的对象——wordpress数据库中的”blog_posts”表。浏览该表，找到”post_type”项，发现其中有”revision” 删除”blog_post”中”post_type”项标识为”revision”的数据 直接使用SQL语句也可： DELETE FROM wp_posts WHERE post_type = 'revision'; 貌似这是一个最傻的做法，你总不能三天两头的就登录一下PHPMYADMIN去清理这些修订版吧，那么是否有更好的办法呢？ 当然答案是肯定的，有更好的方法来解决这个问题。 在wp-config.php里的添加如下代码： /** 禁用修订版本功能. */ define('WP_POST_REVISIONS', ...</p></div></li><li><div class="seo_alrp_rl_content"><h3><a href="http://www.st-winthink.com/index.php/41.html" rel="bookmark">WordPress安全:正确设置WordPress的目录/文件权限</a></h3><p>在各式各样的网络攻击手段层出不穷的今天，如何将恶意攻击者拒之门外，保证Web服务器的安全便成了网站能够稳定地提供服务的最基本保障。当然，网络与服务器安全是一个很大的话题，相对而言，一般性的博客网站也很难成为网络攻击者的目标，但若由此便掉以轻心则显然是不智的，毕竟，如今网络攻击的门槛越来越低，即使一个懵懵懂懂的小P孩使用随处可以找到的攻击工具也可能对我们的网站带来事实上的伤害。 那么，应如何保证我们基于WordPress博客的安全呢？ 这一方面要求我们在为博客选择虚拟主机时考虑主机商的硬件设备与技术能力，确定其是否能够稳定地抵御绝大多数的网络攻击，另一方面，也需要我们正确地设置Web服务器中的目录/文件权限，不给恶意攻击者可乘之机。 从理论上来说，要保证Web服务器的安全，最简单的办法便是赋予文件最低的操作权限，比如说所有文件均为只读，而不可写不可执行，这样，攻击者便会无从下手。但在实际应用中，情况并非这么简单，以使用WordPress搭建的博客网站来说，必须赋予某些文件的可写、可执行权限，因为WordPress自身在运行过程中需要存取、修改某些文件才能实现网站的服务功能。 对Wordpress目录/文件权限的设置，实际上就是在网站的可用性、易用性与安全性之间寻得一个恰当的平衡。下面我们具体来讨论一下(以Linux/Apache平台、WordPress位于网站根目录为例)： “/wp-admin/”： WordPress管理目录，其中的所有文件应该只赋予所有者可写权限； “/wp-includes/”：WordPress 支持库目录，其中的所有文件应该只赋予所有者可写权限； “/wp-content/”：这个目录下的文件权限设置相对复杂了些，让我们分别来看： “/wp-content/themes/”：对于WordPress主题目录下的文件，如果您从不使用WordPress内置的主题编辑器，那么可以简单地设置其仅允许所有者可写；当然，对大部分朋友来说，可能常常需要修改主题如css、模板文件等，这就应赋予这些文件Apache运行用户（一般为nobody）所在组的可写权限。 而“/wp-content/plugins/”目录下存放的插件文件，同样也需视情况而定，一般而言，大部分插件可以只赋予所有者可写权限，但同样也存在部分插件需赋予Apache运行用户（一般为nobody）所在组的可写权限。 而如果要使用WordPress内置的Database Backup插件，则需要将整个“/wp-content/”目录赋予可写的权限，一般为755，在某些主机设置中甚至可能需要更高的777。 “/”：WordPress根目录，应该只赋予所有者可写权限；不过，如果您的博客使用Permalinks，需要WordPress来自动生成、应用rewrite规则，则必须赋予Apache 对“.htaccess”的操作权限。此外，如其中内含连接wordpress 数据库的用户名与密码的“wp-config.php”，则应赋予更严格的操作控制，禁止遍历，极端情况下可直接将其设为600。</p></div></li><li><div class="seo_alrp_rl_content"><h3><a href="http://www.st-winthink.com/index.php/44.html" rel="bookmark">禁止右键及查看源代码的方法</a></h3><p>一些禁止查看源文件的脚本，用在网页中，能起到防止别人复制等效果，但是也可以通过其他办法看到源代码，或是复制里面的内容。下面的方法都是一些基本的 js脚本，简单的用用就行了，真正能防到什么程序，谁也不好说。有句话说的好，真正做的好的页面，就不怕被人仿、复制、看，本来互联网就是个开放的嘛。 锁定右键 将网页中的换为如下代码即可： &lt;body oncontextmenu="return false" ondragstart="return false" onselectstart ="return false" onselect="document.selection.empty()" oncopy="document.selection.empty()" onbeforecopy="return false" onmouseup="document.selection.empty()"&gt; 拒绝另存 在和之间加入如下代码： &lt;noscript&gt;&lt;iframe src="/防止被别人框架~~~~~~~~~~~~~~~ &lt;SCRIPT language=javascript&gt; if (top.location != self.location){top.location=self.location; } &lt;/SCRIPT&gt; ~~~~~~~~~~~~~~~~~~~~~~~~~~ 取消选取、防止复制 &lt;SCRIPT language=JavaScript&gt; window.ClearEvent=function(){event.cancelBubble=false;var sSrcTagName=event.srcElement.tagName.toLowerCase(); return (sSrcTagName=="textarea" || sSrcTagName=="input" || sSrcTagName=="select");} window.ClearKey=function(){event.cancelBubble=false;var iKeyCode=event.keyCode;return !(iKeyCode==78 &amp;&amp; event.ctrlKey);} with (window.document){oncontextmenu=onselectstart=ondragstart=window.ClearEvent;onkeydown=window.ClearKey;} &lt;/SCRIPT&gt; &lt;BODY oncontextmenu=self.event.returnValue=false onselectstart="return false"&gt; &lt;body onselectstart="return false"&gt; 不准粘贴 onpaste="return false" 防止复制 oncopy="return false;" oncut="return false;" ...</p></div></li><li><div class="seo_alrp_rl_content"><h3><a href="http://www.st-winthink.com/index.php/46.html" rel="bookmark">图片加水印, 生成缩略图类</a></h3><p>使用方法. // 原始图片 $img1 = './image/test.jpg'; // 水印后的图片 $img2 = './image/test_new.jpg'; // 水印 $water = './image/water.gif'; $img = new image(); // 等比缩放 $img-&gt;param($img1)-&gt;thumb('./image/test_0.jpg', 200,200,0); // ...</p></div></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.st-winthink.com/index.php/39.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>网站综合收录查询、PR值查询</title>
		<link>http://www.st-winthink.com/index.php/38.html</link>
		<comments>http://www.st-winthink.com/index.php/38.html#comments</comments>
		<pubDate>Sat, 06 Nov 2010 11:38:01 +0000</pubDate>
		<dc:creator>管理员</dc:creator>
				<category><![CDATA[SEO]]></category>

		<guid isPermaLink="false">http://www.st-winthink.com/?p=38</guid>
		<description><![CDATA[收录查询 http://indexed.webmasterhome.cn/ There are no posts related to 网站综合收录查询、PR值查询.]]></description>
			<content:encoded><![CDATA[<p><a href="http://indexed.webmasterhome.cn/?domain=www.st-winthink.com" target="_blank">收录查询</a><br />
<a href="http://indexed.webmasterhome.cn/?domain=www.st-winthink.com">http://indexed.webmasterhome.cn/</a></p>
<p>There are no posts related to 网站综合收录查询、PR值查询.</p>]]></content:encoded>
			<wfw:commentRss>http://www.st-winthink.com/index.php/38.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>各大搜索引擎网站登录入口</title>
		<link>http://www.st-winthink.com/index.php/32.html</link>
		<comments>http://www.st-winthink.com/index.php/32.html#comments</comments>
		<pubDate>Wed, 03 Nov 2010 08:10:12 +0000</pubDate>
		<dc:creator>管理员</dc:creator>
				<category><![CDATA[SEO]]></category>

		<guid isPermaLink="false">http://www.st-winthink.com/?p=32</guid>
		<description><![CDATA[各大搜索引擎网站登录入口 百度网站登录入口 Google网站登录入口 Yahoo网站登录入口 Bing网站登录入口 Dmoz网站登录入口 Coodir网站目录登录入口 Alexa网站登录入口 搜狗网站收录提交入口 Soso网站收录提交入口 有道搜索网站登录入口 搜索引擎收录查询 中国搜索网站登录入口 Onebigdirectory.com 搜索 引擎批量提交 Freewebsubmission.com 搜索引擎批量提交 Posts Related to 各大搜索引擎网站登录入口IE条件注释与CSS Hacks我们知道，IE6的存在，因其预装于目前市场占有率最大的 Windows XP 操作系统。对于老态龙钟的IE6，说拜拜还需要很长的时间。 IE虽然给我们网页设计师，带来了不少多麻烦，还好，IE条件注释，给我们解决浏览器兼容问题带来了一个很好的方法。 一、什么是IE条件注释？ IE条件注释，顾名思义就是使用IE特有的条件语句来显示代码块。 这些巧妙的逻辑片段只能被IE浏览器所支持，其它的浏览器理解为纯粹的HTML注释，不起任何作用。条件注释在IE5中首次出现，并且得到了Widnows浏览器所有后续版本的支持。IE条件注释及其有效，而且非常容易记住。通过这些技巧，我们可以为基于Windows的IE5、6、7、8添加一些特殊的行为。这样做的好处是，HTML和CSS代码可以通过验证。主要的缺点是这些注释需要放在HTML页面中，而不是放在CSS中。这样，当你不需要这些东西，或者有所更改的时候，就需要维护很多的地方。好处是通过这种方式使用条件注释，可以很轻松的管理项目中的目标浏览器，并使得CSS补丁文件保持独立自由。更重要的是它帮助我们优化了 CSS样式表，保证了主要样式表的干净，这对于大型网站来说就很重要了，也许你还没有感觉到它的可爱之处。 作为有Web标准意识的开发者，我们始终应该首先在大部分现有的兼容标准的浏览器上测试我们的设计，然后再为那些稍作细微修改就能回到正轨的浏览器提供补丁。 二、条件注释使用方法 条件注释属性 gt : greater than，选择条件版本以上版本，不包含条件版本 lt : less than，选择条件版本以下版本，不包含条件版本 gte : greater than or ...]]></description>
			<content:encoded><![CDATA[<p><strong>各大搜索引擎网站登录入口</strong></p>
<p><a href="http://www.baidu.com/search/url_submit.html" target="_blank">百度网站登录入口</a><br />
<a href="http://www.google.com/addurl/" target="_blank">Google网站登录入口</a><br />
<a href="http://search.help.cn.yahoo.com/h4_4.html" target="_blank">Yahoo网站登录入口</a><br />
<a href="http://cn.bing.com/docs/submit.aspx?FORM=WSDD2" target="_blank">Bing网站登录入口</a><br />
<a href="http://www.dmoz.com/World/Chinese_Simplified" target="_blank">Dmoz网站登录入口</a><br />
<a href="http://www.coodir.com/accounts/addsite.asp" target="_blank">Coodir网站目录登录入口</a><br />
<a href="http://www.alexa.com/help/webmasters" target="_blank">Alexa网站登录入口</a></p>
<p><a href="http://www.sogou.com/feedback/urlfeedback.php" target="_blank">搜狗网站收录提交入口</a><br />
<a href="http://www.soso.com/help/usb/urlsubmit.shtml" target="_blank">Soso网站收录提交入口</a><br />
<a href="http://tellbot.youdao.com/report" target="_blank">有道搜索网站登录入口</a><br />
<a href="http://indexed.webmasterhome.cn/" target="_blank">搜索引擎收录查询</a><br />
<a href="http://ads.zhongsou.com/register/page.jsp" target="_blank">中国搜索网站登录入口</a><br />
<a href="http://www.onebigdirectory.com/cgi-bin/dir/addurl.cgi" target="_blank">Onebigdirectory.com 搜索</a><br />
<a href="http://www.onebigdirectory.com/cgi-bin/dir/addurl.cgi" target="_blank">引擎批量提交</a><br />
<a href="http://www.freewebsubmission.com/" target="_blank">Freewebsubmission.com 搜索引擎批量提交</a></p>
<div id="seo_alrp_related"><h2>Posts Related to 各大搜索引擎网站登录入口</h2><ul><li><div class="seo_alrp_rl_content"><h3><a href="http://www.st-winthink.com/index.php/20.html" rel="bookmark">IE条件注释与CSS Hacks</a></h3><p>我们知道，IE6的存在，因其预装于目前市场占有率最大的 Windows XP 操作系统。对于老态龙钟的IE6，说拜拜还需要很长的时间。 IE虽然给我们网页设计师，带来了不少多麻烦，还好，IE条件注释，给我们解决浏览器兼容问题带来了一个很好的方法。 一、什么是IE条件注释？ IE条件注释，顾名思义就是使用IE特有的条件语句来显示代码块。 这些巧妙的逻辑片段只能被IE浏览器所支持，其它的浏览器理解为纯粹的HTML注释，不起任何作用。条件注释在IE5中首次出现，并且得到了Widnows浏览器所有后续版本的支持。IE条件注释及其有效，而且非常容易记住。通过这些技巧，我们可以为基于Windows的IE5、6、7、8添加一些特殊的行为。这样做的好处是，HTML和CSS代码可以通过验证。主要的缺点是这些注释需要放在HTML页面中，而不是放在CSS中。这样，当你不需要这些东西，或者有所更改的时候，就需要维护很多的地方。好处是通过这种方式使用条件注释，可以很轻松的管理项目中的目标浏览器，并使得CSS补丁文件保持独立自由。更重要的是它帮助我们优化了 CSS样式表，保证了主要样式表的干净，这对于大型网站来说就很重要了，也许你还没有感觉到它的可爱之处。 作为有Web标准意识的开发者，我们始终应该首先在大部分现有的兼容标准的浏览器上测试我们的设计，然后再为那些稍作细微修改就能回到正轨的浏览器提供补丁。 二、条件注释使用方法 条件注释属性 gt : greater than，选择条件版本以上版本，不包含条件版本 lt : less than，选择条件版本以下版本，不包含条件版本 gte : greater than or ...</p></div></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.st-winthink.com/index.php/32.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>我不能呼吸 完整版 &#8211; miss A</title>
		<link>http://www.st-winthink.com/index.php/30.html</link>
		<comments>http://www.st-winthink.com/index.php/30.html#comments</comments>
		<pubDate>Tue, 28 Sep 2010 05:54:23 +0000</pubDate>
		<dc:creator>管理员</dc:creator>
				<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">http://www.st-winthink.com/?p=30</guid>
		<description><![CDATA[我不能呼吸 完整版 &#8211; miss A There are no posts related to 我不能呼吸 完整版 - miss A.]]></description>
			<content:encoded><![CDATA[<p><a href="http://121.9.210.45/88b086d84eaeb29bedec130cf5b7e1cd/data1/Ym9rZQ--/MjAxMA--/MDk-/Mjg-/MDU-/bXp4NmttM2ZldGpqMGJja2drc2sybjNveXR1Zzg4bjAuZmx2.flv">我不能呼吸 完整版 &#8211; miss A</a></p>
<p><embed src="http://client.joy.cn/flvplayer/1933213_1_0_1.swf" quality="high" width="600" height="400" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash"></embed></p>
<p>There are no posts related to 我不能呼吸 完整版 - miss A.</p>]]></content:encoded>
			<wfw:commentRss>http://www.st-winthink.com/index.php/30.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://121.9.210.45/88b086d84eaeb29bedec130cf5b7e1cd/data1/Ym9rZQ--/MjAxMA--/MDk-/Mjg-/MDU-/bXp4NmttM2ZldGpqMGJja2drc2sybjNveXR1Zzg4bjAuZmx2.flv" length="345" type="video/x-flv" />
		</item>
	</channel>
</rss>

