当前位置:编程学习 > 网站相关 >>

文件存在不进行rewrite的代码 RewriteCond %{REQUEST_FILENAME} !-f

很多时候我们在书写rewrite规则会遇到一个问题,就是文件已经存在,可是规则会冲突,尤其是重写目录的时候,这个时候我们只需要加入以下语句就可以避免:

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d #如果目录存在就直接访问目录不进行RewriteRule

RewriteCond %{REQUEST_URI} !^.*(\.css|\.js|\.gif|\.png|\.jpg|\.jpeg)$ #如果是这些后缀的文件,就直接访问文件,不进行Rewrite


以上方法中,测试发现,除了最后通过后缀名来过滤来过滤的以外都无效,可通过后缀名来过滤并不是我的初衷,通过查看RewriteLog日志发现 (通过在http.conf文件添加RewriteLog logs/rewrite.log来开启RewriteLog日志),同样是因为相对路径问题而导致的错误,于是在配置的时候加上文档的根目录。修改为如 下配置:

RewriteEngine on

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ /index.php/$1
测试成功!

总结,编写Rewrite配置的时候,在http.conf文件里面和在.htaccess文件里面是有区别的,需要注意路径问题,使 用.htaccess是以.htaccess文件所在的目录为起始目录,而在http.conf中编写配置是,一定要加上文档的根目录,如“/”、 “{DOCUMENT_ROOT}”等…

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,