<?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>A18制造 &#187; wordpress</title>
	<atom:link href="http://a18zhizao.com/ytag/wordpress/feed" rel="self" type="application/rss+xml" />
	<link>http://a18zhizao.com</link>
	<description>梦想的种子飞入了大地，所需要的只有时间。</description>
	<lastBuildDate>Tue, 24 Jan 2012 11:50:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>wordpress非插件防垃圾评论方法</title>
		<link>http://a18zhizao.com/y2009/1152_wordpress-anti-spam-method-of-non-plug-in.html</link>
		<comments>http://a18zhizao.com/y2009/1152_wordpress-anti-spam-method-of-non-plug-in.html#comments</comments>
		<pubDate>Tue, 22 Dec 2009 00:36:52 +0000</pubDate>
		<dc:creator>a18ccms</dc:creator>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[垃圾评论]]></category>

		<guid isPermaLink="false">http://www.a18zhizao.cn/y2009/1152_wordpress-anti-spam-method-of-non-plug-in.html</guid>
		<description><![CDATA[这个方法来自网上, 已经被转载多次了, 很多地方叫 "WordPress 代码添加算术验证码防止垃圾评论", 我已经无法找到原始出处. 我只是对它进行了一点小小的改进, 把它变成了 +-/* 四则运算. 方法也不是很复杂, 加入一个运算法则的变量就行了. 效果见下面的评论. 在主题文件夹里找到comments.php文件,在你想要显示输入框的地方加入代码(我是填写在：div class="submitbutton"中): 在文件wp-comments-post.php中加入如下代码进行验证(我是填写在：if ( '' == $comment_content )上): 这篇文章来自 迷途知返]]></description>
			<content:encoded><![CDATA[<p>这个方法来自网上, 已经被转载多次了, 很多地方叫 "WordPress 代码添加算术验证码防止垃圾评论", 我已经无法找到原始出处. 我只是对它进行了一点小小的改进, 把它变成了 +-/* 四则运算. 方法也不是很复杂, 加入一个运算法则的变量就行了. 效果见下面的评论.<br />
<span id="more-1152"></span><br />
在主题文件夹里找到comments.php文件,在你想要显示输入框的地方加入代码(我是填写在：div class="submitbutton"中):</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
    $b = rand(1,9);
    $c = rand(1,4);
    if($c==1){$a = rand(0,40); $s = '+';}
    elseif($c==2){$a = rand(0,30)+$b; $s = '-';}
    elseif($c==3){$a = rand(0,5); $s = '*';}
    else {$a = $b*$c; $s = '/';}
    echo _e(&quot;$a $s $b =&quot;, 'inove'); ?&gt;
    &lt;input type=&quot;text&quot; name=&quot;cal&quot; id=&quot;cal&quot; class=&quot;textfield&quot; value=&quot;&quot; size=&quot;4&quot; tabindex=&quot;5&quot; style=&quot;width:20px&quot; /&gt;&lt;?php if ($req) _e('(required)', 'inove'); ?&gt;
    &lt;input name=&quot;a&quot; type=&quot;hidden&quot; value=&quot;&lt;?php echo $a;?&gt;&quot; /&gt;
    &lt;input name=&quot;b&quot; type=&quot;hidden&quot; value=&quot;&lt;?php echo $b;?&gt;&quot; /&gt;
    &lt;input name=&quot;c&quot; type=&quot;hidden&quot; value=&quot;&lt;?php echo $c;?&gt;&quot; /&gt;
</pre>
<p>在文件wp-comments-post.php中加入如下代码进行验证(我是填写在：if ( '' == $comment_content )上):</p>
<pre class="brush: php; title: ; notranslate">
if ( !$user-&gt;ID ) {
    $a = trim($_POST['a']);
    $b = trim($_POST['b']);
    $c = trim($_POST['c']);
    $sub = trim($_POST['cal']);
    if($c==1) $res = (bool)($sub == $a + $b);
    elseif($c==2) $res = (bool)($sub == $a - $b);
    elseif($c==3) $res = (bool)($sub == $a * $b);
    elseif($c==4) $res = (bool)($sub == $a / $b);
    else $res = false;

    if(!$res || empty($sub)){
        wp_die( __('Error: please enter the right calculating result.') );
    }
}
</pre>
<p>这篇文章来自 <a href="http://pwwang.com/technology/wp-wp-plugins/wordpress%E9%9D%9E%E6%8F%92%E4%BB%B6%E9%98%B2%E5%9E%83%E5%9C%BE%E8%AF%84%E8%AE%BA%E6%96%B9%E6%B3%95/">迷途知返</a></p>
]]></content:encoded>
			<wfw:commentRss>http://a18zhizao.com/y2009/1152_wordpress-anti-spam-method-of-non-plug-in.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>WordPress 防止冒充留言</title>
		<link>http://a18zhizao.com/y2009/996_wordpress-to-prevent-bogus-message.html</link>
		<comments>http://a18zhizao.com/y2009/996_wordpress-to-prevent-bogus-message.html#comments</comments>
		<pubDate>Mon, 08 Jun 2009 01:15:31 +0000</pubDate>
		<dc:creator>a18ccms</dc:creator>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[冒充]]></category>
		<category><![CDATA[留言]]></category>
		<category><![CDATA[防止]]></category>

		<guid isPermaLink="false">http://www.a18zhizao.cn/?p=996</guid>
		<description><![CDATA[WordPress 一直以来都有个问题, 如果博主设置评论不需要审核批准就能发表, 那么有可能被人冒名顶替管理员或其他注册用户进行留言. WordPress 是以 email 来识别留言者的, 也就是说, 只要有人知道管理员的邮箱, 那就可以冒充他留言. 虽说管理员可以随后删除这些评论, 但是万一管理员长期不在线或者有人恶意留言那还是挺麻烦的.]]></description>
			<content:encoded><![CDATA[<p><strong>以下转载来自：MG12</strong></p>
<p>WordPress 一直以来都有个问题, 如果博主设置评论不需要审核批准就能发表, 那么有可能被人冒名顶替管理员或其他注册用户进行留言. WordPress 是以 email 来识别留言者的, 也就是说, 只要有人知道管理员的邮箱, 那就可以冒充他留言. 虽说管理员可以随后删除这些评论, 但是万一管理员长期不在线或者有人恶意留言那还是挺麻烦的.</p>
<p>这个问题在我刚使用 WordPress 的时候 (WP 2.2) 就发现了, 但这应该不是 bug, 只能认为是设计不周. 后台有提供两种评论审核机制的, 一种是全部都要审核, 另一种是对审核过的不再需要审核. 但这对网站管理和用户体验来说都是极大的挑战, 所以大多数站长都不会打开审核功能, 就这样留下了隐患.</p>
<p>我在以前的主题中试过加入一些 JavaScript 简单的阻挡一下冒充行为, 但觉得这只能防君子, 形同虚设, 后来也就撤了. 但最近有位同志为了这个跑我的博客来搞测试, 把我给郁闷死了. 所以还是想办法解决了它吧. 其实处理方法很简单, 就是在提交评论的时候多加一个检验, 如果评论者用了管理员或者注册用户的 email 进行留言, 就跳转报错页面. 处理方法如下:</p>
<p>1. 到 WordPress 的根目录, 打开文件 wp-comments-post.php. (每次发表评论都要调用它, 就拿它开刀吧.)<br />
2. 查找 <code>if ( '' == $comment_content )</code>, 在它之前追加以下代码. (一般在处理内容之前处理 email.)</p>
<pre lang="php">
if (!$user->ID) {
	$result_set = $wpdb->get_results("SELECT display_name, user_email FROM $wpdb->users WHERE display_name = '" . $comment_author . "' OR user_email = '" . $comment_author_email . "'");
	if ($result_set) {
		if ($result_set[0]->display_name == $comment_author) {
			wp_die( __('Error: you are not allowed to use the nickname that you entered.') );
		} else {
			wp_die( __('Error: you are not allowed to use the email that you entered.') );
		}
	}
}
</pre>
<p>我这样处理, 会对包括管理员在内的所有注册用户的 email 进行检测. 但如果你只是想禁止输入管理员或者作者等特殊群体的 email, 那么你需要在 SQL 中关联上 $wpdb->usermeta 这个表, 并对 meta_key = 'wp_capabilities' 的项进行筛选.</p>
<p>看到这, 你是不是还有个问题? 为什么不用 add_action('comment_form', 'email_validate'); 处理呢? 因为用这个的话, email_validate 方法只会在评论提交完成后才触发, 评论都已经发表成功了, 那么 email 的检测就失去意义了.</p>
<p>好吧! 相信你已经知道怎么干了, 我就不多说了. 如果你对此怀疑, 可以在这里用我的 email 测试一下.</p>
]]></content:encoded>
			<wfw:commentRss>http://a18zhizao.com/y2009/996_wordpress-to-prevent-bogus-message.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>10个WordPress的.htaccess技巧</title>
		<link>http://a18zhizao.com/y2009/957_10-wordpress-in-htaccess-techniques.html</link>
		<comments>http://a18zhizao.com/y2009/957_10-wordpress-in-htaccess-techniques.html#comments</comments>
		<pubDate>Wed, 29 Apr 2009 06:55:25 +0000</pubDate>
		<dc:creator>a18ccms</dc:creator>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[技巧]]></category>

		<guid isPermaLink="false">http://www.a18zhizao.cn/?p=957</guid>
		<description><![CDATA[对于Apache服务器，使用.htaccess文件可以进行很多相关网络服务访问的配置。而以下的10个技巧则专门针对WordPress所进行的设置，推荐大家参考使用]]></description>
			<content:encoded><![CDATA[<p>对于<strong>Apache</strong>服务器，使用<strong>.htaccess</strong>文件可以进行很多相关网络服务访问的配置。而以下的10个技巧则专门针对WordPress所进行的设置，推荐大家参考使用：<br />
1. <strong>重定向WordPress的RSS Feed链接地址到Feedburner地址：<br />
</strong>除了修改WP的模板文件来定制其输出的RSS Feed链接地址外，还可以使用.htaccess文件来进行设置(替换yourrssfeedlink为自己的Feedburner地址)。<br />
<span id="more-957"></span></p>
<pre lang="htaccess">
# temp redirect wordpress content feeds to feedburner
<ifModule mod_rewrite.c>
 RewriteEngine on
 RewriteCond %{HTTP_USER_AGENT} !FeedBurner    [NC]
 RewriteCond %{HTTP_USER_AGENT} !FeedValidator [NC]
 RewriteRule ^feed/?([_0-9a-z-]+)?/?$ http://feeds2.feedburner.com/catswhocode [R=302,NC,L]
</ifModule>
</pre>
<p>2. <strong>去除WordPress分类链接中的“/category/”：</strong><br />
默认情况下，WordPress的分类链接显示的样式为：</p>
<pre lang="htaccess">

http://a18zhizao.com/blog/category/tech
</pre>
<p>其实其中的category部分没有任何意义，如果想去掉它可以修改.htaccess文件(替换yourblog为自己的网址)。</p>
<pre lang="htaccess">
RewriteRule ^category/(.+)$ http://www.yourblog.com/$1 [R=301,L]
</pre>
<p>3. <strong>使用浏览器缓存：<br />
</strong>可以修改.htaccess文件让访问者使用浏览器缓存来优化其访问速度。</p>
<pre lang="htaccess">
#FileETag MTime Size
<ifmodule mod_expires.c>
  <filesmatch "\.(jpg|gif|png|css|js)$">
       ExpiresActive on
       ExpiresDefault "access plus 1 year"
   </filesmatch>
</ifmodule>
</pre>
<p>4. <strong>压缩静态数据</strong>：<br />
可以修改.htaccess文件来压缩需要访问的数据（传输后在访问端解压），从而可以减少访问流量和载入时间。</p>
<pre lang="htaccess">
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css application/x-javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch bMSIE !no-gzip !gzip-only-text/html
</pre>
<p>5. <strong>重定向日期格式的WP Permalink链接地址为Postname格式：<br />
</strong>如果你目前的Permalink地址为/%year%/%monthnum%/%day%/%postname%/ 的格式，那么我强烈推荐你直接使用/%postname%/ ，这样对搜索引擎要舒服得多。首先你需要在WordPress的后台设置输出的Permalinks格式为/%postname%/ 。然后修改.htaccess文件来重定向旧的链接，不然别人以前收藏你的网址都会转成404哦！(替换yourdomain为自己的网址)</p>
<pre lang="htaccess">
RedirectMatch 301 /([0-9]+)/([0-9]+)/([0-9]+)/(.*)$ http://www.yourdomain.com/$4
</pre>
<p>6. <strong>阻止没有referrer来源链接的垃圾评论：<br />
</strong>设置.htaccess文件可以阻止大多数无Refferrer来源的垃圾评论机器人Bot Spammer。其会查询访问你网站的来源链接，然后阻止其通过wp-comments-post.php来进行垃圾评论。</p>
<pre lang="htaccess">
RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .wp-comments-post\.php*
RewriteCond %{HTTP_REFERER} !.*yourblog.com.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]
</pre>
<p>7. <strong>定制访问者跳转到维护页面：</strong><br />
当你进行网站升级，模板修改调试等操作时，最好让访问者临时跳转到一个声明的维护页面(和404错误页面不同)，来通知网站暂时无法访问，而不是留下一片空白或者什么http bad错误。（替换maintenance.html为自己定制的维护页面网址，替换123.123.123.123为自己目前的IP地址，不然你自己访问也跳转哦）</p>
<pre lang="htaccess">
RewriteEngine on
RewriteCond %{REQUEST_URI} !/maintenance.html$
RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123
RewriteRule $ /maintenance.html [R=302,L]
</pre>
<p>8. <strong>设置你的WordPress防盗链：</strong><br />
盗链是指其它网站直接使用你自己网站内的资源，从而浪费网站的流量和带宽，比如图片，上传的音乐，电影等文件。（替换mysite为自己的网址和/images/notlink.jpg为自己定制的防盗链声明图片）</p>
<pre lang="htaccess">
RewriteEngine On
#Replace ?mysite\.com/ with your blog url
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?mysite\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
#Replace /images/nohotlink.jpg with your "don't hotlink" image url
RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L]
</pre>
<p>9. <strong>只允许自己的IP访问wp-admin：<br />
</strong>如果你不是团队合作Blog，最好设置只有自己能够访问WP的后台。前提是你的IP不是像我一样动态的哦。（替换xx.xx.xx.xx为自己的IP地址）</p>
<pre lang="htaccess">
AuthUserFile /dev/null
AuthGroupFile /dev/null
AuthName "Example Access Control"
AuthType Basic
<limit GET>
order deny,allow
deny from all
allow from xx.xx.xx.xx
</limit>
</pre>
<p>10. <strong>阻止指定IP的访问：</strong><br />
如果你想要阻止指定IP的访问，来防止其垃圾评论，那么你可以创建自己的Backlist黑名单。(替换xx.xx.xx.xx为指定的IP地址)</p>
<pre lang="htaccess">
<limit GET POST>
order allow,deny
deny from xx.xx.xx.xx
allow from all
</limit>
</pre>
]]></content:encoded>
			<wfw:commentRss>http://a18zhizao.com/y2009/957_10-wordpress-in-htaccess-techniques.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>wordpress的Bug 禁止媒体自动播放</title>
		<link>http://a18zhizao.com/y2009/952_bug-in-wordpress-automatic-ban-on-broadcast-media.html</link>
		<comments>http://a18zhizao.com/y2009/952_bug-in-wordpress-automatic-ban-on-broadcast-media.html#comments</comments>
		<pubDate>Mon, 20 Apr 2009 10:37:12 +0000</pubDate>
		<dc:creator>a18ccms</dc:creator>
				<category><![CDATA[网摘]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[禁止]]></category>
		<category><![CDATA[自动播放]]></category>

		<guid isPermaLink="false">http://www.a18zhizao.cn/?p=952</guid>
		<description><![CDATA[WP文章中用播放器插入的媒体总是会自动播放]]></description>
			<content:encoded><![CDATA[<p>WP文章中用播放器插入的媒体总是会自动播放<br />
打开单个页面的时候还好，如果是一个文章列表页面中有很多就乱套了<br />
可是WP编辑文章的时候在参数里取消 自动播放 是无效的<br />
只要一保存参数就不见了<br />
这两天自己摸索出了答案<br />
WP编辑器给加出的参数是红色那段 例子如下</p>
<pre lang="html"><embed type="application/x-mplayer2" width="100" height="100" src="你的媒体地址" autostart="false"></embed></pre>
<p>正确有效的方法是这样</p>
<pre lang="html"><embed type="application/x-mplayer2" width="100" height="100" src="你的媒体地址">
<param name="AutoStart" value="0"></embed></pre>
<p>我还是菜鸟这问题苦恼了好几天摸索了出来<br />
希望对有同样烦恼的朋友能有所帮助</p>
]]></content:encoded>
			<wfw:commentRss>http://a18zhizao.com/y2009/952_bug-in-wordpress-automatic-ban-on-broadcast-media.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress主题函数</title>
		<link>http://a18zhizao.com/y2009/934_wordpress-theme-function.html</link>
		<comments>http://a18zhizao.com/y2009/934_wordpress-theme-function.html#comments</comments>
		<pubDate>Wed, 08 Apr 2009 01:14:25 +0000</pubDate>
		<dc:creator>a18ccms</dc:creator>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[主题]]></category>
		<category><![CDATA[函数]]></category>

		<guid isPermaLink="false">http://www.a18zhizao.cn/?p=934</guid>
		<description><![CDATA[wordpress主题函数有许多。这里列举最常用的几个部分。]]></description>
			<content:encoded><![CDATA[<p><strong>（一）WordPress基本模板文件</strong>，一套完整的WordPress模板包括如下文件，但是只有index.php和style.css是不能缺少的：</p>
<ol>
<li>style.css : CSS(样式表)文件，不可缺少版权部分，真正CSS样式表可以放在其他文件；</li>
<li>index.php : 主页模板，不可缺少；</li>
<li>archive.php : Archive/Category模板，如果缺少，默认为index.php的显示；</li>
<li>404.php : Not Found 错误页模板，如果缺少，默认为index.php的显示；</li>
<li>comments.php : 留言/回复模板，不可缺少；</li>
<li>footer.php : Footer模板，可合并到index.php；</li>
<li>header.php : Header模板，可合并到index.php；</li>
<li>sidebar.php : 侧栏模板，可合并到index.php；</li>
<li>page.php : 内容页(Page)模板，如果缺少，默认为index.php的显示；</li>
<li>single.php : 内容页(Post)模板，如果缺少，默认为index.php的显示；</li>
<li>searchform.php : 搜索表单模板，可合并到index.php；</li>
<li>search.php : 搜索结果模板，如果缺少，默认为index.php的显示；</li>
</ol>
<p><span id="more-934"></span><br />
<strong>（二）基本条件判断Tag</strong></p>
<ol>
<li>is_home() : 是否为主页</li>
<li>is_single() : 是否为内容页(Post)</li>
<li>is_page() : 是否为内容页(Page)</li>
<li>is_category() : 是否为Category/Archive页</li>
<li>is_tag() : 是否为Tag存档页</li>
<li>is_date() : 是否为指定日期存档页</li>
<li>is_year() : 是否为指定年份存档页</li>
<li>is_month() : 是否为指定月份存档页</li>
<li>is_day() : 是否为指定日存档页</li>
<li>is_time() : 是否为指定时间存档页</li>
<li>is_archive() : 是否为存档页</li>
<li>is_search() : 是否为搜索结果页</li>
<li>is_404() : 是否为 “HTTP 404: Not Found” 错误页</li>
<li>is_paged() : 主页/Category/Archive页是否以多页显示</li>
</ol>
<p><strong>（三）Header部分常用到的PHP函数</strong></p>
<ol>
<li>&lt;?php bloginfo('name'); ?&gt; : 博客名称(Title)</li>
<li>&lt;?php bloginfo('stylesheet_url'); ?&gt; : CSS文件路径</li>
<li>&lt;?php bloginfo('pingback_url'); ?&gt; : PingBack Url</li>
<li>&lt;?php bloginfo('template_url'); ?&gt; : 模板文件路径</li>
<li>&lt;?php bloginfo('version'); ?&gt; : WordPress版本</li>
<li>&lt;?php bloginfo('atom_url'); ?&gt; : Atom Url</li>
<li>&lt;?php bloginfo('rss2_url'); ?&gt; : RSS 2.o Url</li>
<li>&lt;?php bloginfo('url'); ?&gt; : 博客 Url</li>
<li>&lt;?php bloginfo('html_type'); ?&gt; : 博客网页Html类型</li>
<li>&lt;?php bloginfo('charset'); ?&gt; : 博客网页编码</li>
<li>&lt;?php bloginfo('description'); ?&gt; : 博客描述</li>
<li>&lt;?php wp_title(); ?&gt; : 特定内容页(Post/Page)的标题</li>
</ol>
<p><strong>（四）模板常用的PHP函数及命令</strong></p>
<ol>
<li>&lt;?php get_header(); ?&gt; : 调用Header模板</li>
<li>&lt;?php get_sidebar(); ?&gt; : 调用Sidebar模板</li>
<li>&lt;?php get_footer(); ?&gt; : 调用Footer模板</li>
<li>&lt;?php the_content(); ?&gt; : 显示内容(Post/Page)</li>
<li>&lt;?php if(have_posts()) : ?&gt; : 检查是否存在Post/Page</li>
<li>&lt;?php while(have_posts()) : the_post(); ?&gt; : 如果存在Post/Page则予以显示</li>
<li>&lt;?php endwhile; ?&gt; : While 结束</li>
<li>&lt;?php endif; ?&gt; : If 结束</li>
<li>&lt;?php the_time('字符串') ?&gt; : 显示时间，时间格式由“字符串”参数决定，具体参考PHP手册</li>
<li>&lt;?php comments_popup_link(); ?&gt; : 正文中的留言链接。如果使用 comments_popup_script() ，则留言会在新窗口中打开，反之，则在当前窗口打开</li>
<li>&lt;?php the_title(); ?&gt; : 内容页(Post/Page)标题</li>
<li>&lt;?php the_permalink() ?&gt; : 内容页(Post/Page) Url</li>
<li>&lt;?php the_category(',') ?&gt; : 特定内容页(Post/Page)所属Category</li>
<li>&lt;?php the_author(); ?&gt; : 作者</li>
<li>&lt;?php the_ID(); ?&gt; : 特定内容页(Post/Page) ID</li>
<li>&lt;?php edit_post_link(); ?&gt; : 如果用户已登录并具有权限，显示编辑链接</li>
<li>&lt;?php get_links_list(); ?&gt; : 显示Blogroll中的链接</li>
<li>&lt;?php comments_template(); ?&gt; : 调用留言/回复模板</li>
<li>&lt;?php wp_list_pages(); ?&gt; : 显示Page列表</li>
<li>&lt;?php wp_list_categories(); ?&gt; : 显示Categories列表</li>
<li>&lt;?php next_post_link('%link'); ?&gt; : 下一篇文章链接</li>
<li>&lt;?php previous_post_link('%link'); ?&gt; : 上一篇文章链接</li>
<li>&lt;?php get_calendar(); ?&gt; : 日历</li>
<li>&lt;?php wp_get_archives() ?&gt; : 显示内容存档</li>
<li>&lt;?php posts_nav_link(); ?&gt; : 导航，显示上一篇/下一篇文章链接</li>
<li>&lt;?php include(TEMPLATEPATH . '/文件名'); ?&gt; : 嵌入其他文件，可为定制的模板或其他类型文件</li>
</ol>
<p><strong>（五）与模板相关的其他函数</strong></p>
<ol>
<li><!--p the_search_query();--><span style="font-family: Courier New;">&lt;?php the_search_query(); ?&gt; 搜索表单的值</span></li>
<li>&lt;?php _e('Message'); ?&gt; : 输出相应信息</li>
<li>&lt;?php wp_register(); ?&gt; : 显示注册链接</li>
<li>&lt;?php wp_loginout(); ?&gt; : 显示登录/注销链接</li>
<li><span style="font-family: Courier New;">&lt;?php wp_meta(); ?&gt; 显示管理员的相关控制信息(为插件API HOOK用)</span></li>
<li>&lt;!–next page–&gt; : 将当前内容分页</li>
<li>&lt;!–more–&gt; : 将当前内容截断，以不在主页/目录页显示全部内容</li>
<li>&lt;?php timer_stop(1); ?&gt; : 网页加载时间(秒)</li>
<li>&lt;?php echo get_num_queries(); ?&gt; : 网页加载查询量</li>
</ol>
<p> </p>
<p>显示最新文章<br />
<code><br />
&lt;?php query_posts(’showposts=5′); ?&gt;<br />
&lt;ul&gt;<br />
&lt;?php while (have_posts()) : the_post(); ?&gt;<br />
&lt;li&gt;&lt;a href=”&lt;?php the_permalink() ?&gt;”&gt;&lt;?php the_title(); ?&gt;&lt;/a&gt;&lt;/li&gt;<br />
&lt;?php endwhile;?&gt;<br />
&lt;/ul&gt;<br />
</code><br />
显示最新评论<br />
<code><br />
&lt;?php global $wpdb; $sql = “SELECT DISTINCT ID, post_title, post_password, comment_ID, comment_post_ID, comment_author, comment_date_gmt, comment_approved, comment_type,comment_author_url, SUBSTRING(comment_content,1,30) AS com_excerpt FROM $wpdb-&gt;comments LEFT OUTER JOIN $wpdb-&gt;posts ON ($wpdb-&gt;comments.comment_post_ID = $wpdb-&gt;posts.ID) WHERE comment_approved = ‘1′ AND comment_type = ” AND post_password = ” ORDER BY comment_date_gmt DESC LIMIT 10″; $comments = $wpdb-&gt;get_results($sql); $output = $pre_HTML; $output .= “\n&lt;ul&gt;”; foreach ($comments as $comment) { $output .= “\n&lt;li&gt;”.strip_tags($comment-&gt;comment_author) .”:” . “&lt;a href=\”" . get_permalink($comment-&gt;ID) . “#comment-” . $comment-&gt;comment_ID . “\” title=\”on ” . $comment-&gt;post_title . “\”&gt;” . strip_tags($comment-&gt;com_excerpt) .”&lt;/a&gt;&lt;/li&gt;”; } $output .= “\n&lt;/ul&gt;”; $output .= $post_HTML; echo $output;?&gt;<br />
</code><br />
显示热评文章<br />
<code><br />
&lt;?php $result = $wpdb-&gt;get_results(”SELECT comment_count,ID,post_title FROM $wpdb-&gt;posts ORDER BY comment_count DESC LIMIT 0 , 10″); foreach ($result as $topten) { $postid = $topten-&gt;ID; $title = $topten-&gt;post_title; $commentcount = $topten-&gt;comment_count; if ($commentcount != 0) { ?&gt;<br />
&lt;li&gt;&lt;a href=”&lt;?php echo get_permalink($postid); ?&gt;” title=”&lt;?php echo $title ?&gt;”&gt;&lt;?php echo $title ?&gt;&lt;/a&gt;&lt;/li&gt;<br />
&lt;?php } } ?&gt;<br />
</code><br />
显示文章分类<br />
<code><br />
&lt;h2&gt;Categories&lt;/h2&gt;<br />
&lt;ul&gt;&lt;?php wp_list_cats(’sort_column=name’); ?&gt;&lt;/ul&gt;<br />
</code><br />
显示归档<br />
<code><br />
&lt;h2&gt;Archives&lt;/h2&gt;<br />
&lt;ul&gt;&lt;?php wp_get_archives(’type=monthly’); ?&gt;&lt;/ul&gt;<br />
</code><br />
在侧栏显示页面列表<br />
<code><br />
&lt;h2&gt;Pages&lt;/h2&gt;<br />
&lt;ul&gt;&lt;?php wp_list_pages(’title_li=’); ?&gt;&lt;/ul&gt;<br />
</code><br />
调用Gravatar(只适应2.5以上)<br />
<code><br />
&lt;?php if(function_exists(’get_avatar’)){ echo get_avatar($comment, ‘50?);} ?&gt;<br />
</code><br />
显示友情链接<br />
<code><br />
&lt;ul&gt;&lt;?php get_links_list(); ?&gt;&lt;/ul&gt;<br />
</code><br />
显示管理员链接<br />
<code><br />
&lt;ul&gt;&lt;?php wp_register(); ?&gt;<br />
&lt;li&gt;&lt;?php wp_loginout(); ?&gt;&lt;/li&gt;<br />
&lt;li&gt;&lt;a href=”http://www.wordpress.org/”&gt;WordPress&lt;/a&gt;&lt;/li&gt;<br />
&lt;?php wp_meta(); ?&gt;<br />
&lt;li&gt;&lt;a href=”http://validator.w3.org/check?uri=referer”&gt;XHTML&lt;/a&gt;&lt;/li&gt;<br />
&lt;/ul&gt;<br />
</code><br />
在侧栏显示页面的子页面<br />
<code><br />
&lt;?php$children = wp_list_pages(’title_li=&amp;child_of=’.$post-&gt;ID.’&amp;echo=0′);if ($children) { ?&gt;<br />
&lt;ul&gt;&lt;?php echo $children; ?&gt;&lt;/ul&gt;<br />
&lt;?php } ?&gt;<br />
</code><br />
显示Wordpress标签<br />
<code><br />
&lt;?php the_tags(); ?&gt;<br />
</code><br />
显示Wordpress标签云<br />
<code><br />
&lt;?php wp_tag_cloud(’smallest=8&amp;largest=36&amp;’); ?&gt;<br />
</code><br />
模板标题<br />
<code><br />
&lt;?php /* Template Name: Portfolio */ ?&gt;<br />
</code><br />
动态标题标签<br />
<code><br />
&lt;title&gt;&lt;?phpif (is_home()) { echo bloginfo(’name’); } elseif (is_404()) { echo ‘404 Not Found’; } elseif (is_category()) { echo ‘Category:’; wp_title(”); } elseif (is_search()) { echo ‘Search Results’; } elseif ( is_day() || is_month() || is_year() ) { echo ‘Archives:’; wp_title(”); } else { echo wp_title(”); } ?&gt;&lt;/title&gt;<br />
</code><br />
在独立页面中运行PHP<br />
<code><br />
&lt;?php if ( is_home() ) { include (’file.php’); } ?&gt;</code></p>
]]></content:encoded>
			<wfw:commentRss>http://a18zhizao.com/y2009/934_wordpress-theme-function.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>WordPress Database Backup 中文 备份错误问题</title>
		<link>http://a18zhizao.com/y2009/920_wordpress-database-backupbackup-error-problem.html</link>
		<comments>http://a18zhizao.com/y2009/920_wordpress-database-backupbackup-error-problem.html#comments</comments>
		<pubDate>Fri, 27 Mar 2009 06:50:18 +0000</pubDate>
		<dc:creator>a18ccms</dc:creator>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[WordPress Database Backup]]></category>
		<category><![CDATA[中文]]></category>
		<category><![CDATA[备份]]></category>
		<category><![CDATA[插件]]></category>
		<category><![CDATA[数据库]]></category>

		<guid isPermaLink="false">http://www.a18zhizao.cn/?p=920</guid>
		<description><![CDATA[WordPress Database Backup插件设计上没有考虑非英语用户，导致IE浏览器的用户在使用WordPress中文包后无法正常备份。 在/plugins/wp-db-backup/wp-db-backup.php文件中 修改名为为，在backup_fragment()函数开头加上一句： header( 'Content-Type: text/html; charset=utf-8' ); 您可以自行修改，不过要注意这个文件的格式是UNIX的，记事本编辑不了。 function backup_fragment($table, $segment, $filename) { global $table_prefix, $wpdb; header( 'Content-Type: text/html; charset=utf-8' ); echo "$table:$segment:$filename";]]></description>
			<content:encoded><![CDATA[<p>WordPress Database Backup插件设计上没有考虑非英语用户，导致IE浏览器的用户在使用WordPress中文包后无法正常备份。<br />
在/plugins/wp-db-backup/wp-db-backup.php文件中<br />
修改名为为，在backup_fragment()函数开头加上一句：<br />
<code>header( 'Content-Type: text/html; charset=utf-8' );</code></p>
<p>您可以自行修改，不过要注意这个文件的格式是UNIX的，记事本编辑不了。</p>
<pre lang="php">
	function backup_fragment($table, $segment, $filename) {
		global $table_prefix, $wpdb;
		header( 'Content-Type: text/html; charset=utf-8' );
		echo "$table:$segment:$filename";
</pre>
]]></content:encoded>
			<wfw:commentRss>http://a18zhizao.com/y2009/920_wordpress-database-backupbackup-error-problem.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>禁用并删除 WordPress 文章修订记录</title>
		<link>http://a18zhizao.com/y2009/883_disable-and-delete-the-article-wordpress-revision-history.html</link>
		<comments>http://a18zhizao.com/y2009/883_disable-and-delete-the-article-wordpress-revision-history.html#comments</comments>
		<pubDate>Thu, 05 Mar 2009 06:28:56 +0000</pubDate>
		<dc:creator>a18ccms</dc:creator>
				<category><![CDATA[网摘]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[修订]]></category>
		<category><![CDATA[文章]]></category>

		<guid isPermaLink="false">http://www.a18zhizao.cn/?p=883</guid>
		<description><![CDATA[WordPress 2.6 引入了文章修订历史功能，当时我们翻译成“编辑历史”，但这一功能对多数个人博客毫无用处，还往数据库中写入了一些毫无用武之地的内容，假若你是个有洁癖的人，那么我们一起来看这个教程，来个大扫除吧： 禁用 WordPress 文章修订历史功能 打开 WordPress 根目录下的 wp-config.php 文件，添加如下行即可： define('WP_POST_REVISIONS', false); 删除 WordPress 已有的文章修订记录 WordPress 文章的修订记录，都被写入了数据库，既然我们不使用他们，那么，清除他们吧！通过以下 SQL 语句可以删除： DELETE FROM wp_postmeta WHERE post_id IN (SELECT id FROM wp_posts WHERE post_type = 'revision'); DELETE FROM wp_term_relationships WHERE object_id IN (SELECT id FROM wp_posts WHERE post_type='revision'); DELETE FROM wp_posts WHERE post_type='revision'; 经过上面这两步，WordPress 文章修订历史功能就不会再来打扰你了。这个教程有用吧？欢迎留言哦。]]></description>
			<content:encoded><![CDATA[<p>WordPress 2.6 引入了文章修订历史功能，当时我们翻译成“编辑历史”，但这一功能对多数个人博客毫无用处，还往数据库中写入了一些毫无用武之地的内容，假若你是个有洁癖的人，那么我们一起来看这个教程，来个大扫除吧：</p>
<li>禁用 WordPress 文章修订历史功能 </li>
<p> 打开 WordPress 根目录下的 wp-config.php 文件，添加如下行即可：</p>
<pre lang="php">define('WP_POST_REVISIONS', false);</pre>
<li>删除 WordPress 已有的文章修订记录</li>
<p>WordPress 文章的修订记录，都被写入了数据库，既然我们不使用他们，那么，清除他们吧！通过以下 SQL 语句可以删除：</p>
<pre lang="sql">DELETE FROM wp_postmeta WHERE post_id IN (SELECT id FROM wp_posts WHERE post_type = 'revision');
DELETE FROM wp_term_relationships WHERE object_id IN (SELECT id FROM wp_posts WHERE post_type='revision');
DELETE FROM wp_posts WHERE post_type='revision';</pre>
<p>经过上面这两步，WordPress 文章修订历史功能就不会再来打扰你了。这个教程有用吧？欢迎留言哦。</p>
]]></content:encoded>
			<wfw:commentRss>http://a18zhizao.com/y2009/883_disable-and-delete-the-article-wordpress-revision-history.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WordPress 2.6 beta1 中文版发布</title>
		<link>http://a18zhizao.com/y2008/514_wordpress-26-beta1-chinese-version-released.html</link>
		<comments>http://a18zhizao.com/y2008/514_wordpress-26-beta1-chinese-version-released.html#comments</comments>
		<pubDate>Tue, 24 Jun 2008 12:28:36 +0000</pubDate>
		<dc:creator>a18ccms</dc:creator>
				<category><![CDATA[混论分类]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[中文]]></category>

		<guid isPermaLink="false">http://www.a18zhizao.cn/?p=514</guid>
		<description><![CDATA[今天，WordPress 开发团队发布了 WordPress 2.6 的第一个测试版，WordPress 2.6 beta1 版。 WordPress 2.6 beta1 中文版的下载地址为： http://wordpresschina.googlecode.com/files/wordpress.26.beta1.chs.zip http://wordpresschina.googlecode.com/files/wordpress.26.beta1.chs.tar.gz 当然，你也可以通过点击我们网站的下载链接，然后前往 WordPress 中文版仓库进行下载。 目前，WordPress 团队并没有公布 2.6 版本的特性。但是，从国外的一些博客中，我们可以大概了解到，在 WordPress 在2.6 版本中主要增加和修正了以下部分功能： 允许 ssl 登录控制台； 改进远程发布的安全性； 插件的自动安装； WordPress 自动升级； 主题预览； 主题分页显示； 修改 wp-config 配置文件位置； 支持 Google Gears； 设置默认头像； 文章修订历史； 支持多选功能； 文章数统计； 书签。 目前的 WordPress 2.6 beta1 仍然是测试版，因此主要供大家测试之中，建议大家不要在正式的工作环境中使用此版本。同时，由于 WordPress 2.6 中新增大量词条，目前还没有少部分内容未能完成翻译。希望大家能够对我们的翻译提出宝贵的修正意见，我们也将在下一个版本中，为大家提供更加完美的中文版。]]></description>
			<content:encoded><![CDATA[<p>今天，WordPress 开发团队发布了 <strong>WordPress 2.6</strong> 的第一个测试版，WordPress 2.6 beta1 版。<br />
<strong>WordPress 2.6 beta1 中文版</strong>的下载地址为：</p>
<p><a href="http://wordpresschina.googlecode.com/files/wordpress.26.beta1.chs.zip">http://wordpresschina.googlecode.com/files/wordpress.26.beta1.chs.zip</a><br />
<a href="http://wordpresschina.googlecode.com/files/wordpress.26.beta1.chs.tar.gz">http://wordpresschina.googlecode.com/files/wordpress.26.beta1.chs.tar.gz</a><br />
<span id="more-514"></span><br />
当然，你也可以通过点击我们网站的<a href="http://wpchina.org/downloads/">下载链接</a>，然后前往 <a href="http://code.google.com/p/wordpresschina/downloads/list">WordPress 中文版仓库</a>进行下载。</p>
<p>目前，WordPress 团队并没有公布 2.6 版本的特性。但是，从国外的一些博客中，我们可以大概了解到，在 WordPress 在2.6 版本中主要增加和修正了以下部分功能：</p>
<li>允许 ssl 登录控制台；</li>
<li>改进远程发布的安全性；</li>
<li>插件的自动安装；</li>
<li>WordPress 自动升级；</li>
<li>主题预览；</li>
<li>主题分页显示；</li>
<li>修改 wp-config 配置文件位置；</li>
<li>支持 Google Gears；</li>
<li>设置默认头像；</li>
<li>文章修订历史；</li>
<li>支持多选功能；</li>
<li>文章数统计；</li>
<li>书签。<br />
<strong>目前的 WordPress 2.6 beta1 仍然是测试版，因此主要供大家测试之中，建议大家不要在正式的工作环境中使用此版本。</strong>同时，由于 WordPress 2.6 中新增大量词条，目前还没有少部分内容未能完成翻译。希望大家能够对我们的翻译提出宝贵的修正意见，我们也将在下一个版本中，为大家提供更加完美的中文版。</li>
]]></content:encoded>
			<wfw:commentRss>http://a18zhizao.com/y2008/514_wordpress-26-beta1-chinese-version-released.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache下防止图片盗链(完整篇)</title>
		<link>http://a18zhizao.com/y2008/510_apache-to-prevent-picture-daolian-full-article.html</link>
		<comments>http://a18zhizao.com/y2008/510_apache-to-prevent-picture-daolian-full-article.html#comments</comments>
		<pubDate>Tue, 17 Jun 2008 01:12:00 +0000</pubDate>
		<dc:creator>a18ccms</dc:creator>
				<category><![CDATA[混论分类]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[图片]]></category>
		<category><![CDATA[盗链]]></category>

		<guid isPermaLink="false">http://www.a18zhizao.cn/?p=510</guid>
		<description><![CDATA[相信很多朋友都曾遇到过网站内文件特别是图片被盗链的情况。所谓盗链，是指对方网站直接链接您网站上的文件，而不是将其置于自己的服务器上，一般而言，盗链的对象大多为较耗带宽的大体积文件，如图片、视频等，从某种意义上说，这事实上造成了让您为其访问流量买单：不仅您的服务器带宽被无任何回报地占用，而且，往往会在很大程序上影响您网站的访问速度。 当然，从严格的道德与法律角度讲，对方网站就算不盗链，就算将文件拷贝到其自己的服务器使用，也应首先征得您的许可。不过，在Internet世界里破坏规则往往是不必付出代价的，这也使得许多人习惯了在网站建设中使用别人的内容与资源，源网站自身对此是无能为力的。这方面中文网站更是位于“世界领先”的地位，在中华传统“文化”的熏陶与教育大跃进的共同作用下，与鬼子们对抄袭、盗链大都还遮遮掩掩相比，中文网站往往非但不以为忤反而理直气壮，“窃书不算偷”甚至“窃你的书是看得起你”之类的说辞甚至成为主流。去年笔者就曾遇到过一位“极品男”，因我的某个网站图片被盗链严重，服务器带宽被大量占用，而不得不采用最原始的防盗链手段——那个网站因使用IIS，而且未安装Mod_rewite功能扩展模块——即改变图片文件存储目录与文件名的方式，结果却收到某个盗链网站的抗议，义正辞严地指责我那么做是如何如何地不道德，给他带来了多大的麻烦：他不得不逐个修改每个网页以让图片能够正确显示，并谆谆教导我保持图片url恒定不变才显得更为专业等，让人啼笑皆非。 虽然这类人中龙风不太常见，但是，对于原创网站而言，在网站建设的最初阶段便“断绝”与其往来，一开始便禁止其盗链也许是更佳的选择，当然，也可以为极品男省去很多麻烦。 防止文件盗链目标与要求 下面首先将我们欲实现的目标介绍一下： 统一在网站根目录下的 .htaccess 设置：虽然理论上而言，在Apache中，可以针对每个目录分别设置 .htaccess ，通过权限的继承与覆盖可以实现相当复杂的功能。不过，过多的 .htaccess 往往会增加管理的难度，有时候百密难免有一疏，修改 .htaccess 稍有遗漏便可能造成网站出现问题。 默认情况下禁止其他网站盗链：对图片文件而言，当其他网站使用 &#60;img src=’http://yoursite.com/someimg’&#62; 盗链时自动重定向至类似右图所示的图片，声明版权及宣传您的网站。当然，从降低对服务器带宽占用的角度考虑，这个图片文件不能过大，您也可以简单地拒绝其访问，让其网页上图片位置以红“x”号代替。 允许特定访问来源：单纯针对图片文件来说，事实上也不可能禁止所有除您自身网站之外的其他访问，比如说Google，如果您希望通过Google图片搜索获得一定访问的话，必须让其能够正确读取真正的图片文件，再如应能够让RSS订阅用户看到feed中的图片，这就要求允许来自bloglines等的访问。 允许特定目录下的文件被外部网站使用：完全禁止外部网站有时会带来不便，很多时候，我们自己也可能需要在外部网站使用部分文件。当然，放入这些目录的文件要有一定限制，不然，便失去设置防盗链的意义了。 设置 .htaccess 禁止图片盗链 下面即为博客学堂禁止图片盗链的 .htaccess 设置部分： RewriteEngine on RewriteCond %{REQUEST_URI} ^/(allow1&#124;allow2) RewriteRule ^.*$ - [L] 首先，设置允许可“盗链”即外部网站可以使用的文件所处目录，上面我们设置了两个目录，分别为allow1与allow2，当然，如果您只有一个目录的话，可以将其改为： RewriteCond %{REQUEST_URI} ^/allow1 接下来判断是否为图片文件： RewriteCond %{REQUEST_FILENAME} \.(gif&#124;jpeg&#124;png)$ [NC] 您也可以根据自己的需要设置更多的文件类型。 RewriteCond %{HTTP_REFERER} !^$ 上面这一行意在允许空“HTTP_REFERER”的访问，即允许用户在浏览器地址栏中直接输入图片地址时图片文件的显示。一般而言，这是可选的，不过，建议这么设置，如果强迫必须具有“HTTP_REFERER”才能访问，可能会带来某些问题，比如说在用户通过代理服务器访问时。 RewriteCond %{HTTP_REFERER} !blogsdiy\.org [NC] RewriteCond %{HTTP_REFERER} [...]]]></description>
			<content:encoded><![CDATA[<p>相信很多朋友都曾遇到过网站内文件特别是图片被盗链的情况。所谓盗链，是指对方网站直接链接您网站上的文件，而不是将其置于自己的服务器上，一般而言，盗链的对象大多为较耗带宽的大体积文件，如图片、视频等，从某种意义上说，这事实上造成了让您为其访问流量买单：不仅您的服务器带宽被无任何回报地占用，而且，往往会在很大程序上影响您网站的访问速度。</p>
<p>当然，从严格的道德与法律角度讲，对方网站就算不盗链，就算将文件拷贝到其自己的服务器使用，也应首先征得您的许可。不过，在Internet世界里破坏规则往往是不必付出代价的，这也使得许多人习惯了在网站建设中使用别人的内容与资源，源网站自身对此是无能为力的。这方面中文网站更是位于“世界领先”的地位，在中华传统“文化”的熏陶与教育大跃进的共同作用下，与鬼子们对抄袭、盗链大都还遮遮掩掩相比，中文网站往往非但不以为忤反而理直气壮，“窃书不算偷”甚至“窃你的书是看得起你”之类的说辞甚至成为主流。去年笔者就曾遇到过一位“极品男”，因我的某个网站图片被盗链严重，服务器带宽被大量占用，而不得不采用最原始的防盗链手段——那个网站因使用IIS，而且未安装Mod_rewite功能扩展模块——即改变图片文件存储目录与文件名的方式，结果却收到某个盗链网站的抗议，义正辞严地指责我那么做是如何如何地不道德，给他带来了多大的麻烦：他不得不逐个修改每个网页以让图片能够正确显示，并谆谆教导我保持图片url恒定不变才显得更为专业等，让人啼笑皆非。<span id="more-510"></span></p>
<p>虽然这类人中龙风不太常见，但是，对于原创网站而言，在网站建设的最初阶段便“断绝”与其往来，一开始便禁止其盗链也许是更佳的选择，当然，也可以为极品男省去很多麻烦。</p>
<h3>防止文件盗链目标与要求</h3>
<p><img class="right" style="float: right;" src="http://a18zhizao.com/outlink/outlink.png" alt="盗链警告" width="200" height="70" />下面首先将我们欲实现的目标介绍一下：</p>
<ul>
<li><strong>统一在网站根目录下的 .htaccess 设置</strong>：虽然理论上而言，在Apache中，可以针对每个目录分别设置 .htaccess ，通过权限的继承与覆盖可以实现相当复杂的功能。不过，过多的 .htaccess 往往会增加管理的难度，有时候百密难免有一疏，修改 .htaccess 稍有遗漏便可能造成网站出现问题。</li>
<li><strong>默认情况下禁止其他网站盗链</strong>：对图片文件而言，当其他网站使用 &lt;img src=’http://yoursite.com/someimg’&gt; 盗链时自动重定向至类似右图所示的图片，声明版权及宣传您的网站。当然，从降低对服务器带宽占用的角度考虑，这个图片文件不能过大，您也可以简单地拒绝其访问，让其网页上图片位置以红“x”号代替。</li>
<li><strong>允许特定访问来源</strong>：单纯针对图片文件来说，事实上也不可能禁止所有除您自身网站之外的其他访问，比如说Google，如果您希望通过Google图片搜索获得一定访问的话，必须让其能够正确读取真正的图片文件，再如应能够让RSS订阅用户看到feed中的图片，这就要求允许来自bloglines等的访问。</li>
<li><strong>允许特定目录下的文件被外部网站使用</strong>：完全禁止外部网站有时会带来不便，很多时候，我们自己也可能需要在外部网站使用部分文件。当然，放入这些目录的文件要有一定限制，不然，便失去设置防盗链的意义了。</li>
</ul>
<h3>设置 .htaccess 禁止图片盗链</h3>
<p>下面即为博客学堂禁止图片盗链的 .htaccess 设置部分：</p>
<blockquote><p><code>RewriteEngine on<br />
RewriteCond %{REQUEST_URI} ^/(allow1|allow2)<br />
RewriteRule ^.*$ - [L]</code></p></blockquote>
<p>首先，设置允许可“盗链”即外部网站可以使用的文件所处目录，上面我们设置了两个目录，分别为allow1与allow2，当然，如果您只有一个目录的话，可以将其改为：</p>
<blockquote><p><code>RewriteCond %{REQUEST_URI} ^/allow1</code></p></blockquote>
<p>接下来判断是否为图片文件：</p>
<blockquote><p><code>RewriteCond %{REQUEST_FILENAME} \.(gif|jpeg|png)$ [NC]</code></p></blockquote>
<p>您也可以根据自己的需要设置更多的文件类型。</p>
<blockquote><p><code>RewriteCond %{HTTP_REFERER} !^$</code></p></blockquote>
<p>上面这一行意在允许空“HTTP_REFERER”的访问，即允许用户在浏览器地址栏中直接输入图片地址时图片文件的显示。一般而言，这是可选的，不过，建议这么设置，如果强迫必须具有“HTTP_REFERER”才能访问，可能会带来某些问题，比如说在用户通过代理服务器访问时。</p>
<blockquote><p><code>RewriteCond %{HTTP_REFERER} !blogsdiy\.org [NC]<br />
RewriteCond %{HTTP_REFERER} !google\.com [NC]<br />
RewriteCond %{HTTP_REFERER} !baidu\.com [NC]<br />
RewriteCond %{HTTP_REFERER} !bloglines\.com [NC]<br />
RewriteCond %{HTTP_REFERER} !feedburner\.com [NC]</code></p></blockquote>
<p>设置允许访问的HTTP来源，包括博客学堂自身、Google、Baidu、Bloglines、Feedburner等。</p>
<blockquote><p><code>RewriteRule (.*) /allow1/leech.gif [R,NC,L]</code></p></blockquote>
<p>将不满足上述条件的访问重定向至leech.gif。您可能已经注意到，leech.gif位于允许“盗链”的目录allow1下，这一点很重要，不然，您的警告信息图片将无法在对方网站上显示。</p>
<p>如此，即实现了我们预先设定的防止图片盗链目标。</p>
<h3>其他类型文件的防盗链设定</h3>
<p>如果您的网站上存在其他类似体积较大较耗费带宽的文件如flash、mp3被其他网站盗链，可以同样采取上述策略，比如说，对Flash文件，可用类似如下的设置：</p>
<blockquote><p><code>RewriteCond %{REQUEST_URI} ^/allow1<br />
RewriteRule ^.*$ - [L]</code><code>RewriteBase /<br />
RewriteCond %{REQUEST_FILENAME} \.swf$ [NC]<br />
RewriteCond %{HTTP_REFERER} !^$<br />
RewriteCond %{HTTP_REFERER} !blogsdiy\.org [NC]<br />
(……其他允许访问来源)<br />
RewriteRule (.*) /allow1/leech.swf [R,NC,L]</code></p></blockquote>
<p>当然，需要事先创建一个声明版权信息的flash文件“leech.swf”。其他诸如防止mp3文件、压缩文件(zip或rar)盗链的设置与此类似，不再赘述。</p>
<p>参考文献：<a class="extlink" href="http://seo.highdiy.com/index.php/seo/using-htaccess-to-block-direct-image-linking/" target="_blank">使用.htaccess防止图片盗链</a></p>
]]></content:encoded>
			<wfw:commentRss>http://a18zhizao.com/y2008/510_apache-to-prevent-picture-daolian-full-article.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>解决wp2.5 wp-downloadmanager失效</title>
		<link>http://a18zhizao.com/y2008/446_wp-2-5-wp-downloadmanager.html</link>
		<comments>http://a18zhizao.com/y2008/446_wp-2-5-wp-downloadmanager.html#comments</comments>
		<pubDate>Sun, 30 Mar 2008 16:08:15 +0000</pubDate>
		<dc:creator>a18ccms</dc:creator>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[插件]]></category>

		<guid isPermaLink="false">http://www.a18zhizao.cn/?p=446</guid>
		<description><![CDATA[这个插件，其实挺不错的，但是如果用了永久连接，并且不巧你的永久连接里面包含了%postname%，这样你就开心了，点击连接以后肯定404咯，嘿嘿，其实官方已经有解决方案了，就是把你的Download Templates里面的所有的a href目标都改成 http://www.yoursite.com/?dl_id=%FILE_ID% 也就是类似于我的这个样子 %FILE_NAME% 这样就解决啦，嘿嘿  ]]></description>
			<content:encoded><![CDATA[<p>这个插件，其实挺不错的，但是如果用了永久连接，并且不巧你的永久连接里面包含了%postname%，这样你就开心了，点击连接以后肯定404咯，嘿嘿，其实官方已经有解决方案了，就是把你的Download Templates里面的所有的a href目标都改成<br />
<coolcode lang="html" linenum="off">http://www.yoursite.com/?dl_id=%FILE_ID%</coolcode><br />
也就是类似于我的这个样子<br />
<coolcode lang="html" linenum="off"><strong><a href="http://a18zhizao.com/?dl_id=%FILE_ID%" title="下载: %FILE_NAME%">%FILE_NAME%</a></strong></coolcode><br />
这样就解决啦，嘿嘿<br />
 </p>
]]></content:encoded>
			<wfw:commentRss>http://a18zhizao.com/y2008/446_wp-2-5-wp-downloadmanager.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

