.htaccess 中的重写规则:它有什么作用

jbl*_*lue 2 php .htaccess zend-framework

.htaccess 中的这一行有什么作用,我什么时候需要它?

RewriteRule !.(js|css|ico|gif|jpg|png)$ index.php
Run Code Online (Sandbox Code Playgroud)

我正在使用 zend 并且我注意到由 zend 生成的 .htaccess 没有这个规则,但我看过一个教程,没有解释原因。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
Run Code Online (Sandbox Code Playgroud)

Pek*_*ica 5

这是一个RewriteRule重定向每一个请求,除了那些文件类型(JS,CSS,图标,GIF / JPG / PNG图形)的请求index.php

这样 index.php 就不会处理对静态资源的请求(这通常是一件好事,因为启动 PHP 实例很昂贵。)

然而,它已经在下面的代码块中处理。这部分:

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
Run Code Online (Sandbox Code Playgroud)

排除重定向到index.php物理存在的文件 ( -s); 符号链接 ( -); 和现有目录 ( -d)。

如果您使用引用的第二个块(由 Zend 创建的块),一切都很好。

Apache手册中的参考