<?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>最优良人 &#187; htaccess</title>
	<atom:link href="http://www.zui88.com/view-tag/htaccess/feed" rel="self" type="application/rss+xml" />
	<link>http://www.zui88.com/blog</link>
	<description>中山php&#124;最优网络</description>
	<lastBuildDate>Mon, 13 May 2013 04:56:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.4</generator>
		<item>
		<title>htaccess实现域名绑定，拒绝其他域名访问</title>
		<link>http://www.zui88.com/blog/view-405.html</link>
		<comments>http://www.zui88.com/blog/view-405.html#comments</comments>
		<pubDate>Mon, 17 Sep 2012 09:12:11 +0000</pubDate>
		<dc:creator>lin</dc:creator>
				<category><![CDATA[后端程序]]></category>
		<category><![CDATA[htaccess]]></category>

		<guid isPermaLink="false">http://www.zui88.com/blog/?p=405</guid>
		<description><![CDATA[独立ip的主机，只要其他域名指向该ip都是可以访问的，多域名访问会产生大量重复内容，对seo非常不利，我们可以利用htaccess实现域名绑定，拒绝其他域名访问 在站点根目录建立.htaccess文件，写入如下内容： RewriteEngine on RewriteBase / RewriteCond %{HTTP_HOST} !www.zui88.com [NC] RewriteCond %{HTTP_HOST} !zui88.com [NC] RewriteCond %{HTTP_HOST} !^$ RewriteRule ^.* – [F,L] 这样实现的结果是只能通过www.zui88.com,zui88.com来访问站点，用其他的HOST访问都会显示403Forbidden。 其中：{HTTP_HOST}代表HTTP协议GET动作同时传递的Host的值，[NC]代表忽略大小写；[F]代表动作为禁止；[L]代表最终匹配。]]></description>
			<content:encoded><![CDATA[<p>独立ip的主机，只要其他域名指向该ip都是可以访问的，多域名访问会产生大量重复内容，对seo非常不利，我们可以利用htaccess实现域名绑定，拒绝其他域名访问</p>
<p>在站点根目录建立.htaccess文件，写入如下内容：</p>
<p><span style="color: #ff0000;">RewriteEngine on<br />
RewriteBase /<br />
RewriteCond  %{HTTP_HOST} !www.zui88.com [NC]<br />
RewriteCond %{HTTP_HOST} !zui88.com  [NC]<br />
RewriteCond %{HTTP_HOST}  !^$<br />
RewriteRule ^.* – [F,L]</span></p>
<p>这样实现的结果是只能通过www.zui88.com,zui88.com来访问站点，用其他的HOST访问都会显示403Forbidden。</p>
<p>其中：{HTTP_HOST}代表HTTP协议GET动作同时传递的Host的值，[NC]代表忽略大小写；[F]代表动作为禁止；[L]代表最终匹配。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zui88.com/blog/view-405.html/feed</wfw:commentRss>
		<slash:comments>459</slash:comments>
		</item>
		<item>
		<title>二级目录下，htaccess做301重定向，把ip地址转向域名</title>
		<link>http://www.zui88.com/blog/view-211.html</link>
		<comments>http://www.zui88.com/blog/view-211.html#comments</comments>
		<pubDate>Fri, 26 Aug 2011 07:14:35 +0000</pubDate>
		<dc:creator>lin</dc:creator>
				<category><![CDATA[后端程序]]></category>
		<category><![CDATA[301]]></category>
		<category><![CDATA[htaccess]]></category>

		<guid isPermaLink="false">http://www.zui88.com/blog/?p=211</guid>
		<description><![CDATA[因为网站是放在独立IP的主机上，百度和谷歌直接通过ip地址收录了网站许多页面，包括二级目录下的页面，因为子目录下也存在htaccess文件，有自己的规则，所以根目录的301跳转规则对子目录无效，需要在子目录下再做301重定向。 发现子目录与根目录不同的地方是访问地址后面有没有加斜杠所请求的地址有一点点不同，下面是规则： RewriteBase /news RewriteCond %{HTTP_HOST} ^zui88.com [NC] RewriteRule com(.*)$ http://www.zui88.com$1 [L,R=301] #不加斜杠请求的地址是/wwwroot/zui88.com/news/ RewriteCond %{HTTP_HOST} ^zui88.com [NC] RewriteRule (.*)$ http://www.zui88.com/news/$1 [L,R=301] RewriteCond %{HTTP_HOST} ^124.173.133.154 [NC] RewriteRule com(.*)$ http://www.zui88.com$1 [L,R=301] RewriteCond %{HTTP_HOST} ^124.173.133.154 [NC] RewriteRule (.*)$ http://www.zui88.com/news/$1 [L,R=301]]]></description>
			<content:encoded><![CDATA[<p>因为网站是放在独立IP的主机上，百度和谷歌直接通过ip地址收录了网站许多页面，包括二级目录下的页面，因为子目录下也存在htaccess文件，有自己的规则，所以根目录的301跳转规则对子目录无效，需要在子目录下再做301重定向。</p>
<p>发现子目录与根目录不同的地方是访问地址后面有没有加斜杠所请求的地址有一点点不同，下面是规则：</p>
<p>RewriteBase /news<br />
RewriteCond %{HTTP_HOST} ^zui88.com [NC]<br />
RewriteRule com(.*)$ http://www.zui88.com$1 [L,R=301]<br />
#不加斜杠请求的地址是/wwwroot/zui88.com/news/<br />
RewriteCond %{HTTP_HOST} ^zui88.com [NC]<br />
RewriteRule (.*)$ http://www.zui88.com/news/$1 [L,R=301]</p>
<p>RewriteCond %{HTTP_HOST} ^124.173.133.154 [NC]<br />
RewriteRule com(.*)$ http://www.zui88.com$1 [L,R=301]</p>
<p>RewriteCond %{HTTP_HOST} ^124.173.133.154 [NC]<br />
RewriteRule (.*)$ http://www.zui88.com/news/$1 [L,R=301]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zui88.com/blog/view-211.html/feed</wfw:commentRss>
		<slash:comments>221</slash:comments>
		</item>
		<item>
		<title>.htaccess排除真实目录和文件规则</title>
		<link>http://www.zui88.com/blog/view-179.html</link>
		<comments>http://www.zui88.com/blog/view-179.html#comments</comments>
		<pubDate>Thu, 25 Aug 2011 04:21:47 +0000</pubDate>
		<dc:creator>lin</dc:creator>
				<category><![CDATA[后端程序]]></category>
		<category><![CDATA[htaccess]]></category>

		<guid isPermaLink="false">http://www.zui88.com/blog/?p=179</guid>
		<description><![CDATA[.htaccess排除真实目录和文件规则 RewriteEngine on RewriteBase /html RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L] #RewriteRule ^.*/(sysadm/.+)$ $1/index.php [L]]]></description>
			<content:encoded><![CDATA[<p>.htaccess排除真实目录和文件规则<br />
RewriteEngine on<br />
RewriteBase /html<br />
RewriteCond %{REQUEST_FILENAME} !-f<br />
RewriteCond %{REQUEST_FILENAME} !-d</p>
<p>RewriteRule ^(.*)$ index.php/$1 [L]</p>
<p>#RewriteRule ^.*/(sysadm/.+)$ $1/index.php [L]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zui88.com/blog/view-179.html/feed</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>htaccess在根目录和子目录下的执行顺序</title>
		<link>http://www.zui88.com/blog/view-160.html</link>
		<comments>http://www.zui88.com/blog/view-160.html#comments</comments>
		<pubDate>Tue, 23 Aug 2011 06:13:37 +0000</pubDate>
		<dc:creator>lin</dc:creator>
				<category><![CDATA[后端程序]]></category>
		<category><![CDATA[htaccess]]></category>

		<guid isPermaLink="false">http://www.zui88.com/blog/?p=160</guid>
		<description><![CDATA[如果在根目录和子目录下都存在htaccess文件，默认根目录下htaccess的规则是不会被继承的，如果这些配置需要影响到子目录，需要手动写上"RewriteOptions inherit"才能继承父配置，参考上一篇 htaccess的用法 。 所以如果子目录也要用到根目录的配置规则，最好是重新定义，因为如果单纯的继承的话，根目录htaccess里面的某些规则的路径可能已经不适用子目录。]]></description>
			<content:encoded><![CDATA[<p>如果在根目录和子目录下都存在htaccess文件，默认根目录下htaccess的规则是不会被继承的，如果这些配置需要影响到子目录，需要手动写上"RewriteOptions inherit"才能继承父配置，参考上一篇 <a title="htaccess的用法" href="http://www.zui88.com/blog/view-158.html">htaccess的用法</a> 。</p>
<p>所以如果子目录也要用到根目录的配置规则，最好是重新定义，因为如果单纯的继承的话，根目录htaccess里面的某些规则的路径可能已经不适用子目录。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zui88.com/blog/view-160.html/feed</wfw:commentRss>
		<slash:comments>81</slash:comments>
		</item>
		<item>
		<title>htaccess，apache下分布式配置文件的配置选项和flag标签</title>
		<link>http://www.zui88.com/blog/view-158.html</link>
		<comments>http://www.zui88.com/blog/view-158.html#comments</comments>
		<pubDate>Tue, 23 Aug 2011 06:06:05 +0000</pubDate>
		<dc:creator>lin</dc:creator>
				<category><![CDATA[后端程序]]></category>
		<category><![CDATA[flag]]></category>
		<category><![CDATA[htaccess]]></category>

		<guid isPermaLink="false">http://www.zui88.com/blog/?p=158</guid>
		<description><![CDATA[以下指命令的作用域都是.htaccess RewriteEngine On&#124;Off RewriteEngine 可用On 或者 Off 打开或关闭rewrite功能。 rewrite configurations 不会继承，所以你得给每个你想用 rewrite功能的virtual host加上这个指令。 RewriteBase URL-path RewriteBase指令显式地设置了目录级重写的基准URL。在下文中，你可以看见RewriteRule可以用于目录级的配置文件中 (.htaccess)并在局部范围内起作用，即规则实际处理的只是剥离了本地路径前缀的一部分。处理结束后，这个路径会被自动地附着回去。默认值是"RewriteBase physical-directory-path"。 在对一个新的URL进行替换时，此模块必须把这个URL重新注入到服务器处理中。为此，它必须知道其对应的URL前缀或者说URL基准。通常，此前缀就是对应的文件路径。但是，大多数网站URL不是直接对应于其物理文件路径的，因而一般不能做这样的假定! 所以在这种情况下，就必须用RewriteBase指令来指定正确的URL前缀。 如果你的网站服务器URL不是与物理文件路径直接对应的，而又需要使用RewriteBase指令，则必须在每个对应的.htaccess文件中指定RewriteRule 。 RewriteCond TestString CondPattern RewriteCond指令定义了一个规则的条件，即在一个RewriteRule指令之前有一个或多个RewriteCond指令。条件之后的重写规则仅在当前URI与pattern匹配并且符合这些条件的时候才会起作用。 Notice:All of these tests can also be prefixed by an exclamation mark ('!') to negate their meaning. 在正则表达式中，如果取反的话要用^,在这里需要用!号取反 RewriteOptions Options Sets some special options for the rewrite engine. 设定一些特殊的选项给rewrite. [...]]]></description>
			<content:encoded><![CDATA[<p>以下指命令的作用域都是.htaccess<br />
RewriteEngine On|Off</p>
<p>RewriteEngine 可用On 或者 Off 打开或关闭rewrite功能。<br />
rewrite configurations 不会继承，所以你得给每个你想用 rewrite功能的virtual host加上这个指令。<br />
RewriteBase URL-path</p>
<p>RewriteBase指令显式地设置了目录级重写的基准URL。在下文中，你可以看见RewriteRule可以用于目录级的配置文件中 (.htaccess)并在局部范围内起作用，即规则实际处理的只是剥离了本地路径前缀的一部分。处理结束后，这个路径会被自动地附着回去。默认值是"RewriteBase physical-directory-path"。<br />
在对一个新的URL进行替换时，此模块必须把这个URL重新注入到服务器处理中。为此，它必须知道其对应的URL前缀或者说URL基准。通常，此前缀就是对应的文件路径。但是，大多数网站URL不是直接对应于其物理文件路径的，因而一般不能做这样的假定! 所以在这种情况下，就必须用RewriteBase指令来指定正确的URL前缀。<br />
如果你的网站服务器URL不是与物理文件路径直接对应的，而又需要使用RewriteBase指令，则必须在每个对应的.htaccess文件中指定RewriteRule 。<br />
RewriteCond TestString CondPattern</p>
<p>RewriteCond指令定义了一个规则的条件，即在一个RewriteRule指令之前有一个或多个RewriteCond指令。条件之后的重写规则仅在当前URI与pattern匹配并且符合这些条件的时候才会起作用。<br />
Notice:All of these tests can also be prefixed by an exclamation mark ('!') to negate their meaning. 在正则表达式中，如果取反的话要用^,在这里需要用!号取反<br />
RewriteOptions Options</p>
<p>Sets some special options for the rewrite engine.<br />
设定一些特殊的选项给rewrite.<br />
The Option string can be currently only one:inherit<br />
inherit<br />
此值强制当前配置可以继承其父配置。 在虚拟主机级配置中，它意味着主服务器的映射表、条件和规则可以被继承。 在目录级配置中，它意味着其父目录的.htaccess中的条件和规则可以被继承。<br />
MaxRedirects=number<br />
为了避免目录级RewriteRule的无休止的内部重定向， 在此类重定向和500内部服务器错误次数达到一个最大值的时候， mod_rewrite会停止对此请求的处理。 如果你确实需要对每个请求允许大于10次的内部重定向，可以增大这个值。<br />
This forces the current configuration to inherit the configuration of the parent.<br />
强制当前的配置继承它parent的配置。<br />
在per-virtual-server环境下，意味着maps, conditions , rules会被继承!<br />
在per-directory 环境下 意味着它父目录的.htaccess配置中的conditions , rules 会被继承!<br />
RewriteRule Pattern Substitution [flags]</p>
<p>Text:<br />
.           任何单字符<br />
[chars]     Character class: One  of chars<br />
[^chars]    Character class: None of chars<br />
text1|text2 两者选一个: text1 or text2</p>
<p>Quantifiers:量词<br />
?           0 or 1 of the 前面的 text<br />
*           0 or N of the 前面的 text (N &gt; 0)<br />
+           1 or N of the 前面的 text (N &gt; 1)</p>
<p>Grouping:<br />
(text)      Grouping of text</p>
<p>可用$N来得到()中的内容:<br />
( (a|b) | (c|d))<br />
$1 $2      $3</p>
<p>Anchors:<br />
^           Start of line anchor<br />
$           End   of line anchor</p>
<p>Escaping:<br />
\char       escape that particular char<br />
(for instance to specify the chars ".[]()" etc.)</p>
<p>注意：没有并且&amp;</p>
<p>=========================================================================================<br />
flags</p>
<p>1.<br />
'redirect|R [=code]' (强制重定向 redirect)<br />
以http://thishost[:thisport]/(使新的URL成为一个URI) 为前缀的Substitution可以强制性执行一个外部重定向。 如果code没有指定，则产生一个HTTP响应代码302(临时性移动)。 如果需要使用在300-400范围内的其他响应代码，只需在此指定这个数值即可， 另外，还可以使用下列符号名称之一: temp (默认的), permanent, seeother. 用它可以把规范化的URL反馈给客户端，如, 重写``/~''为 ``/u/''，或对/u/user加上斜杠，等等。 注意: 在使用这个标记时，必须确保该替换字段是一个有效的URL! 否则，它会指向一个无效的位置! 并且要记住，此标记本身只是对URL加上 http://thishost[:thisport]/的前缀，重写操作仍然会继续。 通常，你会希望停止重写操作而立即重定向，则还需要使用'L'标记.<br />
2.<br />
'forbidden|F' (强制URL为被禁止的 forbidden)<br />
强制当前URL为被禁止的，即，立即反馈一个HTTP响应代码403(被禁止的)。 使用这个标记，可以链接若干RewriteConds以有条件地阻塞某些URL。<br />
3.<br />
'gone|G' (强制URL为已废弃的 gone)<br />
强制当前URL为已废弃的，即，立即反馈一个HTTP响应代码410(已废弃的)。 使用这个标记，可以标明页面已经被废弃而不存在了.<br />
4.<br />
'proxy|P' (强制为代理 proxy)<br />
此标记使替换成分被内部地强制为代理请求，并立即(即， 重写规则处理立即中断)把处理移交给代理模块。 你必须确保此替换串是一个有效的(比如常见的以 http://hostname开头的)能够为Apache代理模块所处理的URI。 使用这个标记，可以把某些远程成分映射到本地服务器名称空间， 从而增强了ProxyPass指令的功能。 注意: 要使用这个功能，代理模块必须编译在Apache服务器中。 如果你不能确定，可以检查``httpd -l''的输出中是否有mod_proxy.c。 如果有，则mod_rewrite可以使用这个功能； 如果没有，则必须启用mod_proxy并重新编译``httpd''程序。<br />
5.<br />
'last|L' (最后一个规则 last)<br />
立即停止重写操作，并不再应用其他重写规则。 它对应于Perl中的last命令或C语言中的break命令。 这个标记可以阻止当前已被重写的URL为其后继的规则所重写。 举例，使用它可以重写根路径的URL('/')为实际存在的URL, 比如, '/e/www/'.<br />
6.<br />
'next|N' (重新执行 next round)<br />
重新执行重写操作(从第一个规则重新开始). 这时再次进行处理的URL已经不是原始的URL了，而是经最后一个重写规则处理的URL。 它对应于Perl中的next命令或C语言中的continue命令。 此标记可以重新开始重写操作，即, 立即回到循环的头部。但是要小心，不要制造死循环!<br />
7.<br />
'chain|C' (与下一个规则相链接 chained)<br />
此标记使当前规则与下一个(其本身又可以与其后继规则相链接的， 并可以如此反复的)规则相链接。 它产生这样一个效果: 如果一个规则被匹配，通常会继续处理其后继规则， 即，这个标记不起作用；如果规则不能被匹配， 则其后继的链接的规则会被忽略。比如，在执行一个外部重定向时， 对一个目录级规则集，你可能需要删除``.www'' (此处不应该出现``.www''的)。<br />
8.<br />
'type|T=MIME-type' (强制MIME类型 type)<br />
强制目标文件的MIME类型为MIME-type。 比如，它可以用于模拟mod_alias中的ScriptAlias指令， 以内部地强制被映射目录中的所有文件的MIME类型为``application/x-httpd-cgi''.<br />
9.<br />
'nosubreq|NS' (仅用于不对内部子请求进行处理 no internal sub-request)<br />
在当前请求是一个内部子请求时，此标记强制重写引擎跳过该重写规则。 比如，在mod_include试图搜索可能的目录默认文件(index.xxx)时， Apache会内部地产生子请求。对子请求，它不一定有用的，而且如果整个规则集都起作用， 它甚至可能会引发错误。所以，可以用这个标记来排除某些规则。 根据你的需要遵循以下原则: 如果你使用了有CGI脚本的URL前缀，以强制它们由CGI脚本处理， 而对子请求处理的出错率(或者开销)很高，在这种情况下，可以使用这个标记。<br />
10.<br />
'nocase|NC' (忽略大小写 no case)<br />
它使Pattern忽略大小写，即, 在Pattern与当前URL匹配时，'A-Z' 和'a-z'没有区别。<br />
11.<br />
'qsappend|QSA' (追加请求串 query string append)<br />
此标记强制重写引擎在已有的替换串中追加一个请求串，而不是简单的替换。 如果需要通过重写规则在请求串中增加信息，就可以使用这个标记。<br />
12.<br />
'noescape|NE' (在输出中不对URI作转义 no URI escaping)<br />
此标记阻止mod_rewrite对重写结果应用常规的URI转义规则。 一般情况下，特殊字符(如'%', '$', ';'等)会被转义为等值的十六进制编码。 此标记可以阻止这样的转义，以允许百分号等符号出现在输出中，如： RewriteRule /foo/(.*) /bar?arg=P1\%3d$1 [R,NE]<br />
可以使'/foo/zed'转向到一个安全的请求'/bar?arg=P1=zed'.<br />
13.<br />
'passthrough|PT' (移交给下一个处理器 pass through)<br />
此标记强制重写引擎将内部结构request_rec中的uri字段设置为 filename字段的值，它只是一个小修改，使之能对来自其他URI到文件名翻译器的 Alias，ScriptAlias, Redirect 等指令的输出进行后续处理。举一个能说明其含义的例子： 如果要通过mod_rewrite的重写引擎重写/abc为/def， 然后通过mod_alias使/def转变为/ghi，可以这样: RewriteRule ^/abc(.*) /def$1 [PT]<br />
Alias /def /ghi<br />
如果省略了PT标记，虽然mod_rewrite运作正常， 即, 作为一个使用API的URI到文件名翻译器， 它可以重写uri=/abc/...为filename=/def/...， 但是，后续的mod_alias在试图作URI到文件名的翻译时，则会失效。<br />
注意: 如果需要混合使用不同的包含URI到文件名翻译器的模块时， 就必须使用这个标记。混合使用mod_alias和mod_rewrite就是个典型的例子。</p>
<p>For Apache hackers<br />
如果当前Apache API除了URI到文件名hook之外，还有一个文件名到文件名的hook， 就不需要这个标记了! 但是，如果没有这样一个hook，则此标记是唯一的解决方案。 Apache Group讨论过这个问题，并在Apache 2.0 版本中会增加这样一个hook。<br />
14.<br />
'skip|S=num' (跳过后继的规则 skip)<br />
此标记强制重写引擎跳过当前匹配规则后继的num个规则。 它可以实现一个伪if-then-else的构造: 最后一个规则是then从句，而被跳过的skip=N个规则是else从句. (它和'chain|C'标记是不同的!)<br />
15.<br />
'env|E=VAR:VAL' (设置环境变量 environment variable)<br />
此标记使环境变量VAR的值为VAL, VAL可以包含可扩展的反向引用的正则表达式$N和%N。 此标记可以多次使用以设置多个变量。 这些变量可以在其后许多情况下被间接引用，但通常是在XSSI (via or CGI (如 $ENV{'VAR'})中， 也可以在后继的RewriteCond指令的pattern中通过%{ENV:VAR}作引用。 使用它可以从URL中剥离并记住一些信息。<br />
16.<br />
'cookie|CO=NAME:VAL:domain[:lifetime[:path]]' (设置cookie)<br />
它在客户端浏览器上设置一个cookie。 cookie的名称是NAME，其值是VAL。 domain字段是该cookie的域，比如'.apache.org', 可选的lifetime是cookie生命期的分钟数， 可选的path是cookie的路径。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zui88.com/blog/view-158.html/feed</wfw:commentRss>
		<slash:comments>100</slash:comments>
		</item>
	</channel>
</rss>
