<commit_before><sect1 id="zend.controller.router"  xmlns:xi="http://www.w3.org/2001/XInclude">
    <title>标准路由器：Zend_Controller_Router_Rewrite</title>
    <sect2 id="zend.controller.router.introduction">
        <title>简介</title>
        <para>
            <code>Zend_Controller_Router_Rewrite</code>是标准的框架路由器。路由是个过程，在这个过程中它取出URI的端点（跟着基本URL的URI的那部分）并把它分解成参数来决定哪个模块、哪个控制器和控制器中的哪个动作应该接受请求。模块、控制器、动作和其它参数被打包到<code>Zend_Controller_Request_Http</code>对象，接着这个对象由<code>Zend_Controller_Dispatcher_Standard</code>来处理。路由只发生一次：当请求最初被接收和第一个控制器被派遣之前。                     
        </para>

        <para>
            <code>Zend_Controller_Router_Rewrite</code>被设计来考虑使用纯php结构时mod_rewrite-like的功能性。它非常宽松地基于Ruby on Rails并且不要求任何先前的web服务器URL rewriting的知识。它被设计来和单个Apache的 mod_rewrite规则（其中之一）一起工作：            
        </para>

        <programlisting role="php"><![CDATA[
RewriteEngine on
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php]]>
        </programlisting>

        <para>
            或者：
        </para>

        <programlisting role="php"><![CDATA[
RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 ]]>
        </programlisting>

        <para>
            如果<ulink url="http://www.isapirewrite.com">Isapi_Rewrite</ulink>已经用下列的rewrite规则被安装为一个Isapi扩展， rewrite路由器也可以和IIS web服务器一起使用：
        </para>

        <programlisting role="php"><![CDATA[
RewriteRule ^[\w/\%]*(?:\.(?!(?:js|ico|gif|jpg|png|css)$)[\w\%]*$)? /index.php [I]]]>
        </programlisting>

        <note>
            <title>IIS Isapi_Rewrite</title>
            <para>
                当使用IIS，<code>$_SERVER['REQUEST_URI']</code>将要么不存在，要么被设置成一个空串。在这个例子中，<code>Zend_Controller_Request_Http</code>将企图使用被Isapi_Rewrite扩展设置的<code>$_SERVER['HTTP_X_REWRITE_URL']</code>的值。
            </para>
        </note>

        <para>
            如果使用 Lighttpd，下面的 rewrite 规则有效：
        </para>

        <programlisting role="php"><![CDATA[
url.rewrite-once = ( ".*\.(js|ico|gif|jpg|png|css)$" => "$0", "" => "/index.php")]]>
        </programlisting>
    </sect2>

    <sect2 id="zend.controller.router.usage">
        <title>使用路由器</title><commit_msg>sync with r9420<commit_after><sect1 id="zend.controller.router"  xmlns:xi="http://www.w3.org/2001/XInclude">
    <title>标准路由器：Zend_Controller_Router_Rewrite</title>
    <sect2 id="zend.controller.router.introduction">
        <title>简介</title>
        <para>
            <code>Zend_Controller_Router_Rewrite</code>是标准的框架路由器。路由是个过程，在这个过程中它取出URI的端点（跟着基本URL的URI的那部分）并把它分解成参数来决定哪个模块、哪个控制器和控制器中的哪个动作应该接受请求。模块、控制器、动作和其它参数被打包到<code>Zend_Controller_Request_Http</code>对象，接着这个对象由<code>Zend_Controller_Dispatcher_Standard</code>来处理。路由只发生一次：当请求最初被接收和第一个控制器被派遣之前。                     
        </para>

        <para>
            <code>Zend_Controller_Router_Rewrite</code>被设计来考虑使用纯php结构时mod_rewrite-like的功能性。它非常宽松地基于Ruby on Rails并且不要求任何先前的web服务器URL rewriting的知识。它被设计来和单个Apache的 mod_rewrite规则（其中之一）一起工作：            
        </para>

        <programlisting role="php"><![CDATA[
RewriteEngine on
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php]]>
        </programlisting>

        <para>
            或者：
        </para>

        <programlisting role="php"><![CDATA[
RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 ]]>
        </programlisting>

        <para>
            如果<ulink url="http://www.isapirewrite.com">Isapi_Rewrite</ulink>已经用下列的rewrite规则被安装为一个Isapi扩展， rewrite路由器也可以和IIS web服务器一起使用：
        </para>

        <programlisting role="php"><![CDATA[
RewriteRule ^[\w/\%]*(?:\.(?!(?:js|ico|gif|jpg|png|css)$)[\w\%]*$)? /index.php [I]]]>
        </programlisting>

        <note>
            <title>IIS Isapi_Rewrite</title>
            <para>
                当使用IIS，<code>$_SERVER['REQUEST_URI']</code>将要么不存在，要么被设置成一个空串。在这个例子中，<code>Zend_Controller_Request_Http</code>将企图使用被Isapi_Rewrite扩展设置的<code>$_SERVER['HTTP_X_REWRITE_URL']</code>的值。
            </para>
        </note>

        <para>
            如果使用 Lighttpd，下面的 rewrite 规则有效：
        </para>

        <programlisting role="lighttpd"><![CDATA[url.rewrite-once = (
    ".*\?(.*)$" => "/index.php?$1",
    ".*\.(js|ico|gif|jpg|png|css)$" => "$0", 
    "" => "/index.php" 
)]]></programlisting>
    </sect2>

    <sect2 id="zend.controller.router.usage">
        <title>使用路由器</title>
{'fraction_non_alphanumeric': 0.163003663003663, 'fraction_numerical': 0.006181318681318681, 'mean_word_length': 3.3086785009861934, 'pattern_counts': {'":': 0, '<': 111, '<?xml version=': 0, '>': 116, 'https://': 0, 'lorem ipsum': 0, 'www.': 4, 'xml': 2}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2768231', 'n_tokens_mistral': 1982, 'n_tokens_neox': 1910, 'n_words': 157}