.htaccess中的重写规则:它做了什么

时间:2010-09-17 21:50:18

标签: php zend-framework .htaccess

.htaccess中的这一行是什么,我什么时候需要呢?

RewriteRule !.(js|css|ico|gif|jpg|png)$ index.php

我正在使用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]

2 个答案:

答案 0 :(得分:4)

这是一个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]

对于实际存在的文件(index.php),将重定向排除在-s之外;符号链接(-);和现有目录(-d)。

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

Reference in the Apache manual

答案 1 :(得分:1)

规则:

RewriteRule !.(js|css|ico|gif|jpg|png)$ index.php

基本上说:“如果请求没有(!)结束($)与.js / css / ico / giv / jpg / png重定向到index.php”。

您需要此规则来避免将图像/样式表和js脚本请求传递给index.php。