2010-12-19 92 views

回答

4

逐行解释:

RewriteRule .* index.php [L] 

将被解释第一和每一个请求相匹配(对主机名和端口后的URL部分匹配,并且查询字符串之前)。 .*是一个匹配所有时间的正则表达式。更好更快的规则可能是:

RewriteRule^index.php [L] 

在正则表达式来^,每一个都有一个开始字符串相匹配。这相当于.* - >匹配所有东西。

找到匹配后,处理将继续执行RewriteCond(itions)。 这两个RewriteConditions链接在一个看不见的逻辑AND。只有在两个RewriteConditions都为真时,该块才会匹配。

RewriteCond %{REQUEST_FILENAME} !-f # Check if given file is not a file AND 
RewriteCond %{REQUEST_FILENAME} !-d # Check if given directory is not a file and 

示例:如果您将在服务器上具有以下文件结构。

. 
|-- css 
| `-- base.css 
|-- img 
| `-- logo.png 
`-- index.php 

如果请求URL example.com/ CSS/base.css以下步骤会发生。

  1. 匹配的重写规则(匹配所有的时间)
  2. 将不匹配RewriteCond %{REQUEST_FILENAME} !-f,因为css/base.css是一个文件。
  3. RewriteRule将被跳过,因为没有发生匹配,如果请求URL example.com/ EN /约以下步骤会发生处理将测试其他规则和条件*

  1. 匹配的RewriteRule(符合所有的时间)
  2. 比赛RewriteCond %{REQUEST_FILENAME} !-f,因为en/about是没有文件。
  3. 匹配RewriteCond %{REQUEST_FILENAME} !-d,因为en/about没有目录。
  4. 组合的RewriteRuleRewriteCond创建了一个肯定的匹配 - >
  5. 将请求重定向index.phpL

国旗L装置最后一个规则,这将停止的处理。更多关于flags

此规则组合通常用于将所有请求重定向到Web应用程序的单个入口点。为避免通过index.php提供静态内容,文件和目录将由web服务器提供,而不是由index.php提供。动态站点请求的分派将在index.php的逻辑内完成。

*可以找到正确的数据流量here

3

它重写不磁盘上的文件((!-f))或目录((!-d))匹配的index.php所有请求。 [L]告诉mod_rewrite在此之后停止处理规则。