1).分析根目录下的.htaccess文件
<IfModule mod_rewrite.c> Options +FollowSymLinks IndexIgnore */* RewriteEngine on # if a directory or a file exists, use it directly RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # otherwise forward it to index.php RewriteRule . index.php </IfModule>
1.重写规则为什么要options +followsymlinks
Web服务器的Apache安装编译成功mod_rewrite编译成模块,但当我在网站根目录下放了一个.htaccess配置文件,却得到了一个500内部服务器出错。
我打开我的.htaccess配置文件,发现文件头有 Options +FollowSymlinks
上网查了一下“在 某些服务器配置中,mod_rewrite要求有followsymlinks,否则会显示500内部服务器错误。
[In some (or all?) server configurations, mod_rewrite requires followsymlinks to be enabled, or it will crater with a 500-Server Error.]
在任何情况下,只要您没有指定FollowSymLinks的选项(即Options FollowSymLinks),或者指定了SymLinksIfOwnerMatch选项,Apache将不得不调用额外的系统函数来检查符号链接。每次针对文件名的请求都将触发一次检查。
如果你没有使用followsymlinks规则而网站访问正常,说明你的服务器配置已经默认调用followsymlinks的重写规则,你无需再为你的htaccess文件定义了。但在有些服务器500 Server Error之后的错误日志中提示需要定义SymLinks使得rewrite重写规则起作用。
2.
%{REQUEST_FILENAME} 请求的文件名
!-f 不是文件或不存在
!-d 不是目录或不存在
[L] 这是最后一个匹配项,不再往下匹配