- 论坛徽章:
- 0
|
.htaccess文件功能
1.如果文件储存在(.php, .html ...)直接访问文件
2.浏览器直接访问文件夹
a.如果文件夹存在:读取文件夹里的index.php文件
b.如果文件夹不存在:如果该文件夹所在母文件夹有该文件夹名称.php执行该文件
例子:/admin/----> /admin.php
3.以上rule都不满足时,运行/index.php
以上是我要需要实现的功能,以下是我写的rewrite rule:- <IfModule mod_rewrite.c>
- RewriteEngine On
- RewriteBase /
- RewriteCond %{REQUEST_FILENAME} !-d
- RewriteRule ^/(.+[^/])/?[^\.php]$ $1.php [R,L]
- RewriteCond %{REQUEST_FILENAME} !-f
- RewriteCond %{REQUEST_FILENAME} !-d
- RewriteRule . /index.php [L]
- </IfModule>
复制代码 这套规则在同一套代码,不同版本apache上结果不同。在 apache 2.2.17 上表现正常,但是在apache 2.2.19上就失败。开启RewriteRuleLog 分析日志发现是由于,前导"/"的缘故,在 RewriteRule ^/(.+[^/])/?[^\.php]$ $1.php [R,L] 中,去掉 开始的”/"后,在apache 2.2.19就可以了,但是总觉得这个规则写的不伦不类。而且还是有些个别情况不能正常处理。现在想到的办法是,先把所有未在URL末尾添加"/"的,重定向成末尾添加"/",然后再对重定向后URL进行分析,看是否存在相关目录,没有的话就再次重定向到相关php文件。不知道这样可行不?
还请大家多多指教。 |
|