这个重写规则是什么意思?

时间:2010-01-15 20:13:05

标签: http .htaccess rewrite rule

我正在安装phpancake, 有一个像这样的文件夹

application/
install/
library/
public/
sql_schema/
install.html
install.php

这条规则是什么意思?

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /vote/public/index.php [NC,L]

3 个答案:

答案 0 :(得分:11)

重写有两个部分。第一个指定如果请求的文件名是大小大于0(-s)的常规文件,符号链接(-l)或目录(-d),则重写为无处,例如。不采取行动。 [NC,L]表示该规则不区分大小写,并且是这些条件匹配的最后一条规则。

所有其他请求都转发到/vote/public/index.php

此重写的目的是可以从服务器获取实际的现有文件而不会产生干扰。没有第一条规则,每个文件请求(css和js文件,图像等)都会转到index.php,这会使事情变得非常糟糕。

但通常这是用一个声明写的。你可以否定条件,然后[OR] statemens也可以取出:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /vote/public/index.php [NC,L]

这相当于原始陈述。

答案 1 :(得分:0)

这些主要是标准重写,用于检查磁盘上是否存在所请求的文件(或目录或符号链接),在这种情况下是文件/目录/ etc。应该使用。

所有其他比赛应该转至/votes/public/index.php

答案 2 :(得分:0)

第一条规则将传递所有可以映射到大小大于零(-s)的常规文件,符号链接(-l)或目录({{1 }})。第二条规则获取所有其他请求,并将其重写为 /vote/public/index.php