Mod rewrite 下面的mod_重写代码做什么?
我想知道下面的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
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
的逻辑中完成
*可以找到正确的数据流