<?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>浮山狼de博客 &#187; 重定向</title>
	<atom:link href="https://www.fushanlang.com/tag/rewrite/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.fushanlang.com</link>
	<description>next station - 下一站，活在当下，且行且思</description>
	<lastBuildDate>Sat, 29 Nov 2014 15:14:11 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.2.5</generator>
	<item>
		<title>htaccess Rewrite重定向</title>
		<link>https://www.fushanlang.com/htaccess-rewrite-redirect-1097/</link>
		<comments>https://www.fushanlang.com/htaccess-rewrite-redirect-1097/#comments</comments>
		<pubDate>Sun, 10 Oct 2010 01:30:37 +0000</pubDate>
		<dc:creator><![CDATA[fushanlang]]></dc:creator>
				<category><![CDATA[webserver]]></category>
		<category><![CDATA[编程]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[重定向]]></category>

		<guid isPermaLink="false">http://www.fushanlang.com/blog/?p=1097</guid>
		<description><![CDATA[<p>最近在弄htaccess Rewrite重定向，很多语法生疏了，有找了一番，分享一下。 </p> RewriteEngine On&#124;Off <p>RewriteEngine 可用On 或者 Off 打开或关闭rewrite功能。 rewrite configurations 不会继承，所以你得给每个你想用 rewrite功能的virtual host加上这个指令。</p> RewriteBase URL-path <p>RewriteBase指令显式地设置了目录级重写的基准URL。在下文中，你可以看见RewriteRule可以用于目录级的配置文件中(.htaccess)并在局部范围内起作用，即规则实际处理的只是剥离了本地路径前缀的一部分。处理结束后，这个路径会被自动地附着回去。默认值是&#8221;RewriteBase physical-directory-path&#8221;。 在对一个新的URL进行替换时，此模块必须把这个URL重新注入到服务器处理中。为此，它必须知道其对应的URL前缀或者说URL基准。通常，此前缀就是对应的文件路径。但是，大多数网站URL不是直接对应于其物理文件路径的，因而一般不能做这样的假定! 所以在这种情况下，就必须用RewriteBase指令来指定正确的URL前缀。 如果你的网站服务器URL不是与物理文件路径直接对应的，而又需要使用RewriteBase指令，则必须在每个对应的.htaccess文件中指定RewriteRule 。</p> RewriteCond TestString CondPattern <p>RewriteCond指令定义了一个规则的条件，即在一个RewriteRule指令之前有一个或多个RewriteCond指令。条件之后的重写规则仅在当前URI与pattern匹配并且符合这些条件的时候才会起作用。 Notice:All of these tests can also be prefixed by an exclamation mark (&#8216;!&#8217;) to negate their meaning. 在正则表达式中，如果取反的话要用^,在这里需要用!号取反 </p> RewriteOptions Options <p>Sets some special options for the rewrite <span style="color:#777"> . . . &#8594; Read More: <a href="https://www.fushanlang.com/htaccess-rewrite-redirect-1097/">htaccess Rewrite重定向</a></span>]]></description>
				<content:encoded><![CDATA[<p>最近在弄htaccess Rewrite重定向，很多语法生疏了，有找了一番，分享一下。 </p>
<h4>RewriteEngine On|Off</h4>
<p>RewriteEngine 可用On 或者 Off 打开或关闭rewrite功能。<br />
rewrite configurations 不会继承，所以你得给每个你想用 rewrite功能的virtual host加上这个指令。</p>
<h4>RewriteBase URL-path<span id="more-1097"></span></h4>
<p>RewriteBase指令显式地设置了目录级重写的基准URL。在下文中，你可以看见RewriteRule可以用于目录级的配置文件中(.htaccess)并在局部范围内起作用，即规则实际处理的只是剥离了本地路径前缀的一部分。处理结束后，这个路径会被自动地附着回去。默认值是&#8221;RewriteBase physical-directory-path&#8221;。<br />
在对一个新的URL进行替换时，此模块必须把这个URL重新注入到服务器处理中。为此，它必须知道其对应的URL前缀或者说URL基准。通常，此前缀就是对应的文件路径。但是，大多数网站URL不是直接对应于其物理文件路径的，因而一般不能做这样的假定! 所以在这种情况下，就必须用RewriteBase指令来指定正确的URL前缀。<br />
如果你的网站服务器URL不是与物理文件路径直接对应的，而又需要使用RewriteBase指令，则必须在每个对应的.htaccess文件中指定RewriteRule 。</p>
<h4>RewriteCond TestString CondPattern</h4>
<p>RewriteCond指令定义了一个规则的条件，即在一个RewriteRule指令之前有一个或多个RewriteCond指令。条件之后的重写规则仅在当前URI与pattern匹配并且符合这些条件的时候才会起作用。<br />
<strong>Notice:All of these tests can also be prefixed by an exclamation mark (&#8216;!&#8217;) to negate their meaning. </strong><strong>在正则表达式中，如果取反的话要用^,在这里需要用!号取反 </strong></p>
<h4>RewriteOptions Options</h4>
<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 会被继承!</p>
<h4>RewriteRule Pattern Substitution [flags]</h4>
<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 &#8220;.[]()&#8221; etc.)</p>
<p>注意：没有并且&amp;</p>
<p>=========================================================================================<br />
<strong>flags</strong> </p>
<ol>
<li>
<h4>&#8216;redirect|R [=code]&#8217; (强制重定向 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加上斜杠，等等。 注意: 在使用这个标记时，必须确保该替换字段是一个有效的URL! 否则，它会指向一个无效的位置! 并且要记住，此标记本身只是对URL加上 http://thishost[:thisport]/的前缀，重写操作仍然会继续。 通常，你会希望停止重写操作而立即重定向，则还需要使用&#8217;L&#8217;标记.</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指令的功能。 注意: 要使用这个功能，代理模块必须编译在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命令。 此标记可以重新开始重写操作，即, 立即回到循环的头部。但是要小心，不要制造死循环!</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会内部地产生子请求。对子请求，它不一定有用的，而且如果整个规则集都起作用， 它甚至可能会引发错误。所以，可以用这个标记来排除某些规则。 根据你的需要遵循以下原则: 如果你使用了有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;%&#8217;, &#8216;$&#8217;, &#8216;;&#8217;等)会被转义为等值的十六进制编码。 此标记可以阻止这样的转义，以允许百分号等符号出现在输出中，如： RewriteRule /foo/(.*) /bar?arg=P1\%3d$1 [R,NE]<br />
可以使&#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，可以这样: RewriteRule ^/abc(.*) /def$1 [PT]<br />
Alias /def /ghi<br />
如果省略了PT标记，虽然mod_rewrite运作正常， 即, 作为一个使用API的URI到文件名翻译器， 它可以重写uri=/abc/&#8230;为filename=/def/&#8230;， 但是，后续的mod_alias在试图作URI到文件名的翻译时，则会失效。<br />
注意: 如果需要混合使用不同的包含URI到文件名翻译器的模块时， 就必须使用这个标记。混合使用mod_alias和mod_rewrite就是个典型的例子。</p>
<div>For Apache hackers<br />
如果当前Apache API除了URI到文件名hook之外，还有一个文件名到文件名的hook， 就不需要这个标记了! 但是，如果没有这样一个hook，则此标记是唯一的解决方案。 Apache Group讨论过这个问题，并在Apache 2.0 版本中会增加这样一个hook。</div>
</li>
<li>
<h4>&#8216;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>
]]></content:encoded>
			<wfw:commentRss>https://www.fushanlang.com/htaccess-rewrite-redirect-1097/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 0.114 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2025-12-17 17:24:42 -->
