<?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>任鸟飞网页设计博客-关注网页设计、网站开发、图形图像设计、互联网趣味信息及搜素引擎的IT原创博客 &#187; apache</title>
	<atom:link href="http://www.renniaofei.com/tag/apache/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.renniaofei.com</link>
	<description>任鸟飞网页设计博客-关注网页设计、网站开发、图形图像设计、互联网趣味信息及搜素引擎的IT原创博客</description>
	<lastBuildDate>Fri, 30 Jul 2010 10:51:25 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>利用.htaccess的URL重写（url rewriting）功能实现网站页面伪静态-Apache HTTP Server</title>
		<link>http://www.renniaofei.com/tools/htaccess-url-rewriting-examples-htaccess/</link>
		<comments>http://www.renniaofei.com/tools/htaccess-url-rewriting-examples-htaccess/#comments</comments>
		<pubDate>Fri, 19 Feb 2010 07:22:52 +0000</pubDate>
		<dc:creator>任鸟飞</dc:creator>
				<category><![CDATA[工具]]></category>
		<category><![CDATA[编码]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.renniaofei.com/?p=529</guid>
		<description><![CDATA[URL重写 (URL Rewriting) 是一种REST的相关技术，它可以在 Web Server 中，针对用户所提供的 URL 进行转换后，再传入 Web Server 中的程序处理器.

最常见的用法，就是将一组 URL 层次结构字符串，转换成带有 query string 的 URL，例如：
lihttp://www.renniaofei.com/single.php?cat=code&#38;name=url-rewriting
经过 URL 重写后，可以变成：
http://www.renniaofei.com/code/url-rewriting/
URL重写 (URL Rewriting)的优点：

URL友好，方便用户使用，提高用户体验。
有利于搜索引擎的优化，并且比生成静态更加方便。
 应用程序开发者可以利用这个机制来将参数隐藏起来，可避免让网络上的恶意用户收集到利于发动攻击的信息。

URL重写 (URL Rewriting)的一个简单示例
将product.php?id=12 重写为 product-12.html
.htaccess代码如下：
RewriteEngine on
RewriteRule ^product-([0-9]+)\.html$ product.php?id=$1
URL重写 (URL Rewriting)模块说明
Apache HTTP Server / Module mod_rewrite
/ URL Rewriting Engine
具体配置说明（Configuration Directives）请参考官方网站（http://httpd.apache.org），具体包括下面9个方面（一般情况下只需要配置粗体字部分即可）：

RewriteEngine
RewriteOptions
RewriteLog
RewriteLogLevel
RewriteLock
RewriteMap
RewriteBase
RewriteCond
RewriteRule

下面对上面粗体字部分做简单说明：
1. rewriteEngine： On &#124; Off ，默认值为Off，打开或关闭rewrite功能。
rewrite configurations 不会继承，所以你得给每个你想用 rewrite功能的virtual host加上这个指令。
7. RewriteBase URL-path ，显式地设置了目录级重写的基准URL。
RewriteRule可以用于目录级的配置文件中(.htaccess)并在局部范围内起作用，即规则实际处理的只是剥离了本地路径前缀的一部分。处理结束后，这个路径会被自动地附着回去。默认值是&#8221;RewriteBase physical-directory-path&#8221;。
在对一个新的URL进行替换时，此模块必须把这个URL重新注入到服务器处理中。为此，它必须知道其对应的URL前缀或者说URL基准。通常，此前缀就是对应的文件路径。但是，大多数网站URL不是直接对应于其物理文件路径的，因而一般不能做这样的假定! 所以在这种情况下，就必须用RewriteBase指令来指定正确的URL前缀。
如果你的网站服务器URL不是与物理文件路径直接对应的，而又需要使用RewriteBase指令，则必须在每个对应的.htaccess文件中指定 [...]]]></description>
			<content:encoded><![CDATA[<p><strong>URL重写 (URL Rewriting) </strong>是一种REST的相关技术，它可以在 Web Server 中，针对用户所提供的 URL 进行转换后，再传入 Web Server 中的程序处理器.<br />
<span id="more-529"></span><br />
最常见的用法，就是将一组 URL 层次结构字符串，转换成带有 query string 的 URL，例如：</p>
<p>lihttp://www.renniaofei.com/single.php?cat=code&amp;name=url-rewriting</p>
<p>经过 URL 重写后，可以变成：</p>
<p>http://www.renniaofei.com/code/url-rewriting/</p>
<h4>URL重写 (URL Rewriting)的优点：</h4>
<ol>
<li>URL友好，方便用户使用，提高用户体验。</li>
<li>有利于搜索引擎的优化，并且比生成静态更加方便。</li>
<li> 应用程序开发者可以利用这个机制来将参数隐藏起来，可避免让网络上的恶意用户收集到利于发动攻击的信息。</li>
</ol>
<h4>URL重写 (URL Rewriting)的一个简单示例</h4>
<p>将product.php?id=12 重写为 product-12.html</p>
<p>.htaccess代码如下：</p>
<pre><code>RewriteEngine on
RewriteRule ^product-([0-9]+)\.html$ product.php?id=$1</code></pre>
<h4>URL重写 (URL Rewriting)模块说明</h4>
<p>Apache HTTP Server / Module mod_rewrite<br />
/ URL Rewriting Engine</p>
<p>具体配置说明（Configuration Directives）请参考官方网站（http://httpd.apache.org），具体包括下面9个方面（一般情况下只需要配置粗体字部分即可）：</p>
<ol>
<li><a href="http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html#RewriteEngine"><strong>RewriteEngine</strong></a></li>
<li><a href="http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html#RewriteOptions">RewriteOptions</a></li>
<li><a href="http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html#RewriteLog">RewriteLog</a></li>
<li><a href="http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html#RewriteLogLevel">RewriteLogLevel</a></li>
<li><a href="http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html#RewriteLock">RewriteLock</a></li>
<li><a href="http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html#RewriteMap">RewriteMap</a></li>
<li><a href="http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html#RewriteBase"><strong>RewriteBase</strong></a></li>
<li><a href="http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html#RewriteCond"><strong>RewriteCond</strong></a></li>
<li><a href="http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html#RewriteRule"><strong>RewriteRule</strong></a></li>
</ol>
<p><strong>下面对上面粗体字部分做简单说明：</strong></p>
<p>1. rewriteEngine： <em>On | <strong>Off</strong></em> ，默认值为Off，打开或关闭rewrite功能。</p>
<p>rewrite configurations 不会继承，所以你得给每个你想用 rewrite功能的virtual host加上这个指令。</p>
<p>7. RewriteBase <em>URL-path </em>，显式地设置了目录级重写的基准URL。</p>
<p>RewriteRule可以用于目录级的配置文件中(.htaccess)并在局部范围内起作用，即规则实际处理的只是剥离了本地路径前缀的一部分。处理结束后，这个路径会被自动地附着回去。默认值是&#8221;RewriteBase physical-directory-path&#8221;。<br />
在对一个新的URL进行替换时，此模块必须把这个URL重新注入到服务器处理中。为此，它必须知道其对应的URL前缀或者说URL基准。通常，此前缀就是对应的文件路径。但是，大多数网站URL不是直接对应于其物理文件路径的，因而一般不能做这样的假定! 所以在这种情况下，就必须用RewriteBase指令来指定正确的URL前缀。<br />
如果你的网站服务器URL不是与物理文件路径直接对应的，而又需要使用RewriteBase指令，则必须在每个对应的.htaccess文件中指定 RewriteRule 。</p>
<p>8. RewriteCond <em>TestString CondPattern</em> ，定义了一个规则的条件。</p>
<p>9. RewriteRule <em>Pattern Substitution [flags]</em> 。</p>
<p><strong>正则表达式常用语法（regular expressions）：</strong></p>
<pre>Text:
  .           任何单字符
  [chars]     Character class: One  of chars
  [^chars]    Character class: None of chars
  text1|text2 两者选一个: text1 or text2

Quantifiers:量词
  ?           0 or 1 of the 前面的 text
  *           0 or N of the 前面的 text (N &gt; 0)
  +           1 or N of the 前面的 text (N &gt; 1)

Grouping:
  (text)      Grouping of text

可用$N来得到()中的内容:
 ( (a|b) | (c|d))
$1 $2      $3  

Anchors:
  ^           Start of line anchor
  $           End   of line anchor

Escaping:
  \char       escape that particular char
              (for instance to specify the chars ".[]()" etc.)

注意：没有并且&amp;
</pre>
<p><strong>flags</strong></p>
<ol>
<li>
<h4>&#8216;redirect|R [=code]&#8216; (强制重定向 redirect)</h4>
<p>以http://thishost[:thisport]/(使新的URL成为一个URI) 为前缀的Substitution可以强制性执行一个外部重定向。 如果code没有指定，则产生一个HTTP响应代码302(临时性移动)。 如果需要使用在300-400范围内的其他响应代码，只需在此指定这个数值即可， 另外，还可以使用下列符号名称之一: temp (默认的), permanent, seeother. 用它可以把规范化的URL反馈给客户端，如, 重写&#8220;/~&#8221;为 &#8220;/u/&#8221;，或对/u/user加上斜杠，等等。</p>
<p>注意: 在使用这个标记时，必须确保该替换字段是一个有效的URL! 否则，它会指向一个无效的位置! 并且要记住，此标记本身只是对URL加上 http://thishost[:thisport]/的前缀，重写操作仍然会继续。 通常，你会希望停止重写操作而立即重定向，则还需要使用&#8217;L'标记.</li>
<li>
<h4>&#8216;forbidden|F&#8217; (强制URL为被禁止的 forbidden)</h4>
<p>强制当前URL为被禁止的，即，立即反馈一个HTTP响应代码403(被禁止的)。 使用这个标记，可以链接若干RewriteConds以有条件地阻塞某些URL。</li>
<li>
<h4>&#8216;gone|G&#8217; (强制URL为已废弃的 gone)</h4>
<p>强制当前URL为已废弃的，即，立即反馈一个HTTP响应代码410(已废弃的)。 使用这个标记，可以标明页面已经被废弃而不存在了.</li>
<li>
<h4>&#8216;proxy|P&#8217; (强制为代理 proxy)</h4>
<p>此标记使替换成分被内部地强制为代理请求，并立即(即， 重写规则处理立即中断)把处理移交给代理模块。 你必须确保此替换串是一个有效的(比如常见的以 http://hostname开头的)能够为Apache代理模块所处理的URI。 使用这个标记，可以把某些远程成分映射到本地服务器名称空间， 从而增强了ProxyPass指令的功能。<br />
注意: 要使用这个功能，代理模块必须编译在Apache服务器中。 如果你不能确定，可以检查&#8220;httpd -l&#8221;的输出中是否有mod_proxy.c。 如果有，则mod_rewrite可以使用这个功能； 如果没有，则必须启用mod_proxy并重新编译&#8220;httpd&#8221;程序。</li>
<li>
<h4>&#8216;last|L&#8217; (最后一个规则 last)</h4>
<p>立即停止重写操作，并不再应用其他重写规则。 它对应于Perl中的last命令或C语言中的break命令。 这个标记可以阻止当前已被重写的URL为其后继的规则所重写。 举例，使用它可以重写根路径的URL(&#8216;/&#8217;)为实际存在的URL, 比如, &#8216;/e/www/&#8217;.</li>
<li>
<h4>&#8216;next|N&#8217; (重新执行 next round)</h4>
<p>重新执行重写操作(从第一个规则重新开始). 这时再次进行处理的URL已经不是原始的URL了，而是经最后一个重写规则处理的URL。 它对应于Perl中的next命令或C语言中的continue命令。 此标记可以重新开始重写操作，即, 立即回到循环的头部。<br />
但是要小心，不要制造死循环!</li>
<li>
<h4>&#8216;chain|C&#8217; (与下一个规则相链接 chained)</h4>
<p>此标记使当前规则与下一个(其本身又可以与其后继规则相链接的， 并可以如此反复的)规则相链接。 它产生这样一个效果: 如果一个规则被匹配，通常会继续处理其后继规则， 即，这个标记不起作用；如果规则不能被匹配， 则其后继的链接的规则会被忽略。比如，在执行一个外部重定向时， 对一个目录级规则集，你可能需要删除&#8220;.www&#8221; (此处不应该出现&#8220;.www&#8221;的)。</li>
<li>
<h4>&#8216;type|T=MIME-type&#8217; (强制MIME类型 type)</h4>
<p>强制目标文件的MIME类型为MIME-type。 比如，它可以用于模拟mod_alias中的ScriptAlias指令， 以内部地强制被映射目录中的所有文件的MIME类型为&#8220;application/x-httpd-cgi&#8221;.</li>
<li>
<h4>&#8216;nosubreq|NS&#8217; (仅用于不对内部子请求进行处理 no internal sub-request)</h4>
<p>在当前请求是一个内部子请求时，此标记强制重写引擎跳过该重写规则。 比如，在mod_include试图搜索可能的目录默认文件(index.xxx)时， Apache会内部地产生子请求。对子请求，它不一定有用的，而且如果整个规则集都起作用， 它甚至可能会引发错误。所以，可以用这个标记来排除某些规则。</p>
<p>根据你的需要遵循以下原则: 如果你使用了有CGI脚本的URL前缀，以强制它们由CGI脚本处理， 而对子请求处理的出错率(或者开销)很高，在这种情况下，可以使用这个标记。</li>
<li>
<h4>&#8216;nocase|NC&#8217; (忽略大小写 no case)</h4>
<p>它使Pattern忽略大小写，即, 在Pattern与当前URL匹配时，&#8217;A-Z&#8217; 和&#8217;a-z&#8217;没有区别。</li>
<li>
<h4>&#8216;qsappend|QSA&#8217; (追加请求串 query string append)</h4>
<p>此标记强制重写引擎在已有的替换串中追加一个请求串，而不是简单的替换。 如果需要通过重写规则在请求串中增加信息，就可以使用这个标记。</li>
<li>
<h4>&#8216;noescape|NE&#8217; (在输出中不对URI作转义 no URI escaping)</h4>
<p>此标记阻止mod_rewrite对重写结果应用常规的URI转义规则。 一般情况下，特殊字符(如&#8217;%', &#8216;$&#8217;, &#8216;;&#8217;等)会被转义为等值的十六进制编码。 此标记可以阻止这样的转义，以允许百分号等符号出现在输出中，如：<br />
RewriteRule /foo/(.*) /bar?arg=P1\%3d$1 [R,NE]</p>
<p>可以使&#8217;/foo/zed&#8217;转向到一个安全的请求&#8217;/bar?arg=P1=zed&#8217;.</li>
<li>
<h4>&#8216;passthrough|PT&#8217; (移交给下一个处理器 pass through)</h4>
<p>此标记强制重写引擎将内部结构request_rec中的uri字段设置为 filename字段的值，它只是一个小修改，使之能对来自其他URI到文件名翻译器的 Alias，ScriptAlias, Redirect 等指令的输出进行后续处理。举一个能说明其含义的例子： 如果要通过mod_rewrite的重写引擎重写/abc为/def， 然后通过mod_alias使/def转变为/ghi，可以这样:<br />
RewriteRule ^/abc(.*) /def$1 [PT]</p>
<p>Alias /def /ghi</p>
<p>如果省略了PT标记，虽然mod_rewrite运作正常， 即, 作为一个使用API的URI到文件名翻译器， 它可以重写uri=/abc/&#8230;为filename=/def/&#8230;， 但是，后续的mod_alias在试图作URI到文件名的翻译时，则会失效。</p>
<p>注意: 如果需要混合使用不同的包含URI到文件名翻译器的模块时， 就必须使用这个标记。混合使用mod_alias和mod_rewrite就是个典型的例子。</p>
<p>For Apache hackers</p>
<p>如果当前Apache API除了URI到文件名hook之外，还有一个文件名到文件名的hook， 就不需要这个标记了! 但是，如果没有这样一个hook，则此标记是唯一的解决方案。 Apache Group讨论过这个问题，并在Apache 2.0 版本中会增加这样一个hook。</li>
<li>
<h4>&#8217;skip|S=num&#8217; (跳过后继的规则 skip)</h4>
<p>此标记强制重写引擎跳过当前匹配规则后继的num个规则。 它可以实现一个伪if-then-else的构造: 最后一个规则是then从句，而被跳过的skip=N个规则是else从句. (它和&#8217;chain|C&#8217;标记是不同的!)</li>
<li>
<h4>&#8216;env|E=VAR:VAL&#8217; (设置环境变量 environment variable)</h4>
<p>此标记使环境变量VAR的值为VAL, VAL可以包含可扩展的反向引用的正则表达式$N和%N。 此标记可以多次使用以设置多个变量。 这些变量可以在其后许多情况下被间接引用，但通常是在XSSI (via or CGI (如 $ENV{&#8216;VAR&#8217;})中， 也可以在后继的RewriteCond指令的pattern中通过%{ENV:VAR}作引用。 使用它可以从URL中剥离并记住一些信息。</li>
<li>
<h4>&#8216;cookie|CO=NAME:VAL:domain[:lifetime[:path]]&#8217; (设置cookie)</h4>
<p>它在客户端浏览器上设置一个cookie。 cookie的名称是NAME，其值是VAL。 domain字段是该cookie的域，比如&#8217;.apache.org&#8217;, 可选的lifetime是cookie生命期的分钟数， 可选的path是cookie的路径。</li>
</ol>
<h4>Url Rewriting 实例：</h4>
<p><strong>1. 下载链接伪静态</strong></p>
<pre><code>RewriteEngine on
          RewriteRule ^files/([^/]+)/([^/]+).zip   /download.php?section=$1&amp;file=$2 [NC]
       重写后的url：http://mysite/files/games/hoopy.zip</code></pre>
<p><strong>2. url简化 </strong></p>
<pre><code> RewriteEngine On
          RewriteRule ^grab /public/files/download/download.php</code></pre>
<p>服务器端地址：http://mysite/public/files/download/download.php?file=my.zip</p>
<p>转化后url：http://mysite/grab?file=my.zip</p>
<p><strong>3. $_GET变量捕捉更换 </strong></p>
<pre><code>RewriteEngine On
          RewriteCond %{QUERY_STRING} foo=(.*)
          RewriteRule ^grab(.*) /page.php?bar=%1</code></pre>
<p>服务器端地址：</p>
<p>http://domain.com/page.php?bar=bar</p>
<p>URL转化后：</p>
<p>http://domain.com/grab?foo=bar</p>
<p><strong>4. 域名指向新文件 </strong></p>
<pre><code>RewriteEngine On
          RewriteCond %{HTTP_HOST} ^test\.com$ [OR]
          RewriteCond %{HTTP_HOST} ^www\.test\.com$
          RewriteCond %{REQUEST_URI} !^/new/
          RewriteRule (.*)   /new/$1 </code></pre>
<p>当网站改版时，可直接使用上面代码将域名指向新版完站的文件夹。</p>
<p><strong>5. 将不带www的URL请求转向到带www的URL </strong></p>
<pre><code>RewriteEngine On
          RewriteCond %{HTTP_HOST} ^renniaofei\.com$
          RewriteRule (.*) http://www.renniaofei.com/$1 [R=301,L]</code></pre>
<p><strong>6. 防盗链功能 </strong></p>
<pre><code>RewriteEngine On
       RewriteCond %{HTTP_REFERER} !^http://(.+.)?mysite.com/ [NC]
       RewriteCond %{HTTP_REFERER} !^$
       RewriteRule .*.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L] </code></pre>
<p><strong>Url rewriting 在线工具</strong>：http://www.iwebtool.com/htaccess_url_rewrite</p>
]]></content:encoded>
			<wfw:commentRss>http://www.renniaofei.com/tools/htaccess-url-rewriting-examples-htaccess/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用.htaccess实现图片防盗链</title>
		<link>http://www.renniaofei.com/design/htaccess-fang-daolian/</link>
		<comments>http://www.renniaofei.com/design/htaccess-fang-daolian/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 14:10:04 +0000</pubDate>
		<dc:creator>任鸟飞</dc:creator>
				<category><![CDATA[编码]]></category>
		<category><![CDATA[设计]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.renniaofei.com/?p=508</guid>
		<description><![CDATA[所谓盗链，是指其他网站直接链接我们网站上的文件，一般来说，盗链的对象大多为很耗带宽的大体积文件，如图片、视频等。这样造成的后果主要有：增加了服务器的流量负担，影响我们网站的访问速度。

通过.htaccess来防止网站的图片、压缩文件、或视频等非Html文件被盗链的方法相当简单，通过在该文件中加入几句命令即可保护我们宝贵的带宽。
在.htaccess中添加下面代码
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !renniaofei.com [NC]
RewriteCond %{HTTP_REFERER} !ikuaizi.com [NC]
RewriteCond %{HTTP_REFERER} !zhuaxia.com [NC]
RewriteCond %{HTTP_REFERER} !xianguo.com [NC]
RewriteCond %{HTTP_REFERER} !google.com [NC]
RewriteCond %{HTTP_REFERER} !bloglines.com [NC]
RewriteCond %{HTTP_REFERER} !feedburner.com [NC]
RewriteCond %{HTTP_REFERER} !feedsky.com [NC]
RewriteRule .*.(gif&#124;jpg)$ http://domain.com/no.png [R,NC,L]
对上面代码的解释说明
1、RewriteCond %{HTTP_REFERER} !^$ [NC]
允许空“HTTP_REFERER”的访问，即允许用户在浏览器地址栏中直接输入图片地址时图片文件的显示。一般而言，这是可选的，不过，建议这么设置，如果强迫必须具有“HTTP_REFERER”才能访问，可能会带来某些问题，比如说在用户通过代理服务器访问时。
2、RewriteCond %{HTTP_REFERER} !domain.com [NC]
设置允许访问的HTTP来源，包括我们的站点自身、Google、Baidu、Bloglines、Feedburner等。
3、RewriteRule .*.(gif&#124;jpg&#124;png)$ http://domain.com/no.png [R,NC,L]
定义被盗链时替代的图片，让所有盗链 jpg、gif、png 等文件的网页，显示根目录下的 no.png 文件。注意：替换显示的图片不要放在设置防盗链的目录中，并且该图片文件体积越小越好。当然你也可以不设置替换图片，而是使用下面的语句即可：
RewriteRule .*.(gif&#124;jpg&#124;png)$ &#8211; [F]
4、说明一下其中的R、NC 和 L
R 就是转向的意思
NC 指的是不区分大小写
L 的作用是指明本次转向到此结束，后续的转向不受先前判断语句的影响
5、防止盗链的文件类型
上例中是 gif、jpg、png，而根据需要，可更改或添加其他文件类型，如rar、mov等，不同文件扩展名间使用“&#124;”分割。
这样的话，就可以基本做到简单的防止被盗链情况的发生，而且可以尽最大可能的减少服务器流量的无畏消耗，当然了，如果你不在意这点流量的话，那么可以不用考虑上述设置啦！
功能扩展
RewriteRule .*.(gif&#124;jpg)$ [...]]]></description>
			<content:encoded><![CDATA[<p>所谓盗链，是指其他网站直接链接我们网站上的文件，一般来说，盗链的对象大多为很耗带宽的大体积文件，如图片、视频等。这样造成的后果主要有：增加了服务器的流量负担，影响我们网站的访问速度。<br />
<span id="more-508"></span><br />
通过.htaccess来防止网站的图片、压缩文件、或视频等非Html文件被盗链的方法相当简单，通过在该文件中加入几句命令即可保护我们宝贵的带宽。</p>
<h4>在.htaccess中添加下面代码</h4>
<p>RewriteEngine on<br />
RewriteCond %{HTTP_REFERER} !^$ [NC]<br />
RewriteCond %{HTTP_REFERER} !renniaofei.com [NC]<br />
RewriteCond %{HTTP_REFERER} !ikuaizi.com [NC]<br />
RewriteCond %{HTTP_REFERER} !zhuaxia.com [NC]<br />
RewriteCond %{HTTP_REFERER} !xianguo.com [NC]<br />
RewriteCond %{HTTP_REFERER} !google.com [NC]<br />
RewriteCond %{HTTP_REFERER} !bloglines.com [NC]<br />
RewriteCond %{HTTP_REFERER} !feedburner.com [NC]<br />
RewriteCond %{HTTP_REFERER} !feedsky.com [NC]<br />
RewriteRule .*.(gif|jpg)$ http://domain.com/no.png [R,NC,L]</p>
<h4>对上面代码的解释说明</h4>
<p><span style="color: #008080;">1、RewriteCond %{HTTP_REFERER} !^$ [NC]</span><br />
允许空“HTTP_REFERER”的访问，即允许用户在浏览器地址栏中直接输入图片地址时图片文件的显示。一般而言，这是可选的，不过，建议这么设置，如果强迫必须具有“HTTP_REFERER”才能访问，可能会带来某些问题，比如说在用户通过代理服务器访问时。</p>
<p><span style="color: #008080;">2、RewriteCond %{HTTP_REFERER} !domain.com [NC]</span></p>
<p>设置允许访问的HTTP来源，包括我们的站点自身、Google、Baidu、Bloglines、Feedburner等。</p>
<p><span style="color: #008080;">3、RewriteRule .*.(gif|jpg|png)$ http://domain.com/no.png [R,NC,L]</span></p>
<p>定义被盗链时替代的图片，让所有盗链 jpg、gif、png 等文件的网页，显示根目录下的 no.png 文件。注意：替换显示的图片不要放在设置防盗链的目录中，并且该图片文件体积越小越好。当然你也可以不设置替换图片，而是使用下面的语句即可：</p>
<p>RewriteRule .*.(gif|jpg|png)$ &#8211; [F]</p>
<p><span style="color: #008080;">4、说明一下其中的R、NC 和 L</span></p>
<p>R 就是转向的意思<br />
NC 指的是不区分大小写<br />
L 的作用是指明本次转向到此结束，后续的转向不受先前判断语句的影响</p>
<p><span style="color: #008080;">5、防止盗链的文件类型</span></p>
<p>上例中是 gif、jpg、png，而根据需要，可更改或添加其他文件类型，如rar、mov等，不同文件扩展名间使用“|”分割。</p>
<p>这样的话，就可以基本做到简单的防止被盗链情况的发生，而且可以尽最大可能的减少服务器流量的无畏消耗，当然了，如果你不在意这点流量的话，那么可以不用考虑上述设置啦！</p>
<h4>功能扩展</h4>
<p>RewriteRule .*.(gif|jpg)$ http://domain.com/no.png [R,NC,L] </p>
<p>他的作用是，当请求以 jpg、gif 为扩展名的文件，如果referer 字段不能匹配 http://*.renniaofei.com* 这个表达式时，服务器返回 302 状态码，重定向到 http://domain.com/no.png。为了增加流量，我们也可直接定向到自己的网站。</p>
<p>只需将<br />
RewriteRule .*.(gif|jpg)$ http://domain.com/no.png [R,NC,L] <br />
修改为<br />
RewriteRule .*.(gif|jpg)$ http://domain.com/ [R,NC,L]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.renniaofei.com/design/htaccess-fang-daolian/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.842 seconds -->
