Mod rewrite 下面的mod_重写代码做什么?

Mod rewrite 下面的mod_重写代码做什么?,mod-rewrite,Mod Rewrite,我想知道下面的mod_重写代码是做什么的,有人能详细解释一下代码吗 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule .* index.php [L] 它将所有与磁盘上的文件((!-f))或目录((!-d))不匹配的请求重写到index.php[L]告诉mod_rewrite在此规则之后停止处理规则。它将磁盘上与文件((!-f))或目录((!-d))不匹配的所有请求重写到ind

我想知道下面的mod_重写代码是做什么的,有人能详细解释一下代码吗

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]

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

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

逐行解释:

RewriteRule .* index.php [L]
将首先解释并匹配每个请求(与URL中主机名和端口之后、查询字符串之前的部分匹配)
*
是一个始终匹配的正则表达式。更好更快的规则可能是:

RewriteRule ^ index.php [L]
^
在正则表达式中,匹配每个有开头的字符串。这等于
*
->匹配每件事

在找到匹配项后,处理将继续执行重写条件。 这两个重写条件由一个不可见的逻辑
链接起来。仅当两个重写条件都为真时,此块才会匹配

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将执行以下步骤

  • 为重写规则匹配(始终匹配)
  • 不匹配
    RewriteCond%{REQUEST\u FILENAME}-f
    ,因为
    css/base.css
    是一个文件
  • 重写规则
    将被跳过,因为未发生匹配,处理将测试其他规则和条件*
  • 如果您请求URL example.com/en/about,将执行以下步骤

  • 匹配
    重写规则
    (始终匹配)
  • 匹配
    RewriteCond%{REQUEST\u FILENAME}-f
    ,因为
    en/about
    不是文件
  • 匹配
    RewriteCond%{REQUEST\u FILENAME}-d
    ,因为
    en/about
    没有目录
  • RewriteRule
    RewriteCond
    的组合创建了一个正匹配->
  • 将请求重定向到带有标志的
    L
    index.php
  • 标志
    L
    表示最后一条规则,这将停止处理。更多关于

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


    *可以通过逐行解释找到正确的数据流:

    RewriteRule .* index.php [L]
    
    将首先解释并匹配每个请求(与URL中主机名和端口之后、查询字符串之前的部分匹配)
    *
    是一个始终匹配的正则表达式。更好更快的规则可能是:

    RewriteRule ^ index.php [L]
    
    ^
    在正则表达式中,匹配每个有开头的字符串。这等于
    *
    ->匹配每件事

    在找到匹配项后,处理将继续执行重写条件。 这两个重写条件由一个不可见的逻辑
    链接起来。仅当两个重写条件都为真时,此块才会匹配

    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将执行以下步骤

  • 为重写规则匹配(始终匹配)
  • 不匹配
    RewriteCond%{REQUEST\u FILENAME}-f
    ,因为
    css/base.css
    是一个文件
  • 重写规则
    将被跳过,因为未发生匹配,处理将测试其他规则和条件*
  • 如果您请求URL example.com/en/about,将执行以下步骤

  • 匹配
    重写规则
    (始终匹配)
  • 匹配
    RewriteCond%{REQUEST\u FILENAME}-f
    ,因为
    en/about
    不是文件
  • 匹配
    RewriteCond%{REQUEST\u FILENAME}-d
    ,因为
    en/about
    没有目录
  • RewriteRule
    RewriteCond
    的组合创建了一个正匹配->
  • 将请求重定向到带有标志的
    L
    index.php
  • 标志
    L
    表示最后一条规则,这将停止处理。更多关于

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

    *可以找到正确的数据流