⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mod_rewrite+.html

📁 这个是我在web培训时老师提供的手册
💻 HTML
📖 第 1 页 / 共 5 页
字号:

        <li><em>CondPatterns</em>有若干特殊的变种。除了正则表达式的标准用法,还有下列用法:

          <ul>
            <li>'<strong>&lt;CondPattern</strong>' (词典顺序的小于)<br />
             将<em>CondPattern</em>视为纯字符串,与<em>TestString</em>以词典顺序相比较.
             如果按词典顺序,<em>TestString</em>小于<em>CondPattern</em>,则为真.</li>

            <li>'<strong>&gt;CondPattern</strong>' (词典顺序的大于)<br />
             将<em>CondPattern</em>视为纯字符串,与<em>TestString</em>以词典顺序相比较.
             如果按词典顺序,<em>TestString</em>大于<em>CondPattern</em>,则为真.</li>

            <li>'<strong>=CondPattern</strong>' (词典顺序的等于)<br />
             将<em>CondPattern</em>视为纯字符串,与<em>TestString</em>以词典顺序相比较.
             如果按词典顺序,<em>TestString</em>等于<em>CondPattern</em>,则为真,即,
             两个字符串(逐个字符地)完全相等。如果<em>CondPattern</em>只是<code>""</code>(两个引号),
             则<em>TestString</em>将与空串相比较.</li>

            <li>'<strong>-d</strong>' (是一个目录[<strong>d</strong>irectory])<br />
             将<em>TestString</em>视为一个路径名并测试它是否存在而且是一个目录.</li>

            <li>'<strong>-f</strong>' (是一个常规的文件[<strong>f</strong>ile])<br />
             将<em>TestString</em>视为一个路径名并测试它是否存在而且是一个常规的文件.</li>

            <li>'<strong>-s</strong>' (是一个非空的常规文件[<strong>s</strong>ize])<br />
             将<em>TestString</em>视为一个路径名并测试它是否存在而且是一个尺寸大于0的常规的文件.</li>

            <li>'<strong>-l</strong>' (是一个符号连接[<strong>l</strong>ink])<br />
             将<em>TestString</em>视为一个路径名并测试它是否存在而且是一个符号连接.</li>

            <li>'<strong>-F</strong>' (对子请求有效的业已存在的文件)<br />
             测试<em>TestString</em>是否一个有效的文件,
             而且可以被服务器当前已经配置的所有存取控制所存取。
             它用一个内部子请求来做判断,由于会降低服务器的性能,请小心使用!</li>

            <li>'<strong>-U</strong>' (对子请求有效的业已存在的URL)<br />
             测试<em>TestString</em>是否一个有效的URL,
             而且可以被服务器当前已经配置的所有存取控制所存取。
             它用一个内部子请求来做判断,由于会降低服务器的性能,请小心使用!</li>
          </ul>

<div class="note"><h3>注意</h3>
              所有这些测试都可以用惊叹号作前缀('!')以实现条件的反转.
</div>
        </li>
      </ol>

      <p>另外,还可以为<em>CondPattern</em>追加特殊的标记</p>

      <p class="indent">
        <strong><code>[</code><em>flags</em><code>]</code></strong>
      </p>

      <p>作为<code>RewriteCond</code>指令的第三个参数。
      <em>Flags</em>是一个以逗号分隔的以下标记的列表:</p>

      <ul>
        <li>'<strong><code>nocase|NC</code></strong>'
        (<strong>n</strong>o <strong>c</strong>ase)<br />
         它使测试忽略大小写, <em>即</em>, 扩展后的<em>TestString</em>和<em>CondPattern</em>中,
         'A-Z' 和'a-z'是没有区别的。此标记仅作用于<em>TestString</em>和<em>CondPattern</em>的比较,
         而对文件系统和子请求的测试不起作用。</li>

        <li>
          '<strong><code>ornext|OR</code></strong>'
          (<strong>or</strong> next condition)<br />
           它以OR方式组合若干规则的条件,而不是隐含的AND。典型的例子如下:

<div class="example"><pre>
RewriteCond %{REMOTE_HOST}  ^host1.*  [OR]
RewriteCond %{REMOTE_HOST}  ^host2.*  [OR]
RewriteCond %{REMOTE_HOST}  ^host3.*
RewriteRule ...some special stuff for any of these hosts...
</pre></div>

          如果不用这个标记,则必须使用三个 条件/规则。
        </li>
      </ul>

      <p><strong>举例:</strong></p>

       <p>如果要按请求头中的``<code>User-Agent:</code>'重写一个站点的主页,可以这样写:</p>

<div class="example"><pre>
RewriteCond  %{HTTP_USER_AGENT}  ^Mozilla.*
RewriteRule  ^/$                 /homepage.max.html  [L]

RewriteCond  %{HTTP_USER_AGENT}  ^Lynx.*
RewriteRule  ^/$                 /homepage.min.html  [L]

RewriteRule  ^/$                 /homepage.std.html  [L]
</pre></div>

        <p>含义: 如果你使用的浏览器是Netscape Navigator(其识别标志是'Mozilla'),
        则你将得到内容最大化的主页,包括Frames<em>等等</em>;
        如果你使用的是(基于终端的)Lynx,则你得到的是内容最小化的主页,不包含tables<em>等等</em>;
        如果你使用的是其他的浏览器,则你得到的是一个标准的主页。</p>


</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="RewriteEngine" id="RewriteEngine">RewriteEngine</a> <a name="rewriteengine" id="rewriteengine">指令</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">说明:</a></th><td>打开或关闭运行时刻的重写引擎</td></tr>
<tr><th><a href="directive-dict.html#Syntax">语法:</a></th><td><code>RewriteEngine on|off</code></td></tr>
<tr><th><a href="directive-dict.html#Default">默认值:</a></th><td><code>RewriteEngine off</code></td></tr>
<tr><th><a href="directive-dict.html#Context">上下文:</a></th><td>服务器配置, 虚拟主机, 目录, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">覆盖项:</a></th><td>FileInfo</td></tr>
<tr><th><a href="directive-dict.html#Status">状态:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">模块:</a></th><td>mod_rewrite</td></tr>
</table>       

      <p><code class="directive">RewriteEngine</code>指令打开或关闭运行时刻的重写引擎。
      如果设置为<code>off</code>,则此模块不执行任何运行时刻的重写操作,
      甚至也不更新<code>SCRIPT_URx</code>环境变量。</p>

      <p>使用该指令可以使此模块无效,而无须注释所有的<code class="directive"><a href="#rewriterule">RewriteRule</a></code>指令!</p>

      <p>注意:默认情况下,重写配置是不可继承的,
      即,必须在每个需要的虚拟主机中设置一个<code>RewriteEngine on</code>指令。</p>

</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="RewriteLock" id="RewriteLock">RewriteLock</a> <a name="rewritelock" id="rewritelock">指令</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">说明:</a></th><td>设置RewriteMap同步所使用的加锁文件名</td></tr>
<tr><th><a href="directive-dict.html#Syntax">语法:</a></th><td><code>RewriteLock <em>file-path</em></code></td></tr>
<tr><th><a href="directive-dict.html#Context">上下文:</a></th><td>服务器配置</td></tr>
<tr><th><a href="directive-dict.html#Status">状态:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">模块:</a></th><td>mod_rewrite</td></tr>
</table>
      <p>此指令设置mod_rewrite为了和<code class="directive"><a href="#rewritemap">RewriteMap</a></code>
      <em>程序</em>通讯而使用的一个同步加锁文件的名称。
      在需要使用重写映射表程序时,它必须是一个本地路径(而不能是一个NFS挂接设备);
      对其他类型的重写映射表,则无此要求。</p>

</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="RewriteLog" id="RewriteLog">RewriteLog</a> <a name="rewritelog" id="rewritelog">指令</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">说明:</a></th><td>设置重写引擎日志的文件名</td></tr>
<tr><th><a href="directive-dict.html#Syntax">语法:</a></th><td><code>RewriteLog <em>file-path</em></code></td></tr>
<tr><th><a href="directive-dict.html#Context">上下文:</a></th><td>服务器配置, 虚拟主机</td></tr>
<tr><th><a href="directive-dict.html#Status">状态:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">模块:</a></th><td>mod_rewrite</td></tr>
</table>
      <p><code class="directive">RewriteLog</code>指令设置用于记录所有重写操作的文件的名称。
      如果此文件名不是以斜杠('<code>/</code>')开头,则它是相对于<em>Server Root</em>的。
      此指令应该仅仅出现在服务器级配置中。</p>

<div class="note">如果要关闭对重写操作的记录,不推荐把<em>Filename</em>设置为<code>/dev/null</code>,
          因为,虽然重写引擎不能输出记录了,但仍会内部地建立这个日志文件,
          <strong>它会使服务器速度降低,而且对管理员毫无益处!</strong>
          要关闭日志,可以删除或注解<code class="directive">RewriteLog</code>指令,
          或者使用<code>RewriteLogLevel 0</code>!
</div>

<div class="note"><h3>安全</h3>

参见<a href="../misc/security_tips.html">Apache Security Tips</a>,其中讲述了,
为什么如果存放日志的目录对除了启动服务器以外的用户是可写的会带来安全隐患。
</div>

<div class="example"><h3>举例</h3><p><code>
RewriteLog "/usr/local/var/apache/logs/rewrite.log"
</code></p></div>


</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="RewriteLogLevel" id="RewriteLogLevel">RewriteLogLevel</a> <a name="rewriteloglevel" id="rewriteloglevel">指令</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">说明:</a></th><td>设置重写引擎日志的详细程度的级别</td></tr>
<tr><th><a href="directive-dict.html#Syntax">语法:</a></th><td><code>RewriteLogLevel <em>Level</em></code></td></tr>
<tr><th><a href="directive-dict.html#Default">默认值:</a></th><td><code>RewriteLogLevel 0</code></td></tr>
<tr><th><a href="directive-dict.html#Context">上下文:</a></th><td>服务器配置, 虚拟主机</td></tr>
<tr><th><a href="directive-dict.html#Status">状态:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">模块:</a></th><td>mod_rewrite</td></tr>
</table>
      <p><code class="directive">RewriteLogLevel</code>指令设置重写引擎日志的详细程度的级别。
      默认级别0意味着不记录,而9或更大的值意味着记录所有的操作。</p>

      <p>要关闭重写引擎日志,可以简单地设此值为0,关闭所有的重写操作记录。</p>

<div class="note">使用较高的<em>Level</em>值会使Apache服务器速度急剧下降!
          重写日志使用大于2的<em>Level</em>值只用于调试!
</div>

<div class="example"><h3>举例</h3><p><code>
RewriteLogLevel 3
</code></p></div>


</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="RewriteMap" id="RewriteMap">RewriteMap</a> <a name="rewritemap" id="rewritemap">指令</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">说明:</a></th><td>定义用于关键词查找的映射函数</td></tr>
<tr><th><a href="directive-dict.html#Syntax">语法:</a></th><td><code>RewriteMap <em>MapName</em> <em>MapType</em>:<em>MapSource</em>
</code></td></tr>
<tr><th><a href="directive-dict.html#Context">上下文:</a></th><td>服务器配置, 虚拟主机</td></tr>
<tr><th><a href="directive-dict.html#Status">状态:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">模块:</a></th><td>mod_rewrite</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">兼容性:</a></th><td>Apache 2.0.41及其更新版本中可以使用不同的dbm类型。</td></tr>
</table>
      <p><code class="directive">RewriteMap</code>定义一个<em>映射表</em>,
      由映射函数用于查找关键词来插入/替换字段。此查找操作的源可以是多种类型。</p>

      <p><a id="mapfunc" name="mapfunc"><em>MapName</em></a>是映射表的名称,
      指定了一个映射函数,用于重写规则的字符串替换,它可以是下列形式之一:</p>

      <p class="indent">
        <strong><code>${</code> <em>MapName</em> <code>:</code>
        <em>LookupKey</em> <code>}</code><br />
         <code>${</code> <em>MapName</em> <code>:</code>
        <em>LookupKey</em> <code>|</code> <em>DefaultValue</em>
        <code>}</code></strong>
      </p>

      <p>如果使用了这样的形式,则会在<em>MapName</em>中查找关键词<em>LookupKey</em>。
      如果找到了,则被替换成<em>SubstValue</em>;
      如果没有找到,则被替换成<em>DefaultValue</em>,
      如果没有指定<em>DefaultValue</em>,则被替换成空字符串。</p>

      <p>可以使用下列<em>MapType</em>和<em>MapSource</em>的组合:</p>

      <ul>
        <li>
          <strong>标准纯文本</strong><br />
           MapType: <code>txt</code>, MapSource: 有效的Unix文件系统文件名

          <p>这是重写映射表的标准形式,即,
          <em>MapSource</em>是一个纯文本文件,包含空行、注释行(以字符'#'打头),
          以及每行一个的替换对,如下。</p>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -