【有才亲测】伪静态%{REQUEST_FILENAME} !-f 和!-d用法

%{REQUEST_FILENAME} !-f 和!-d只对下一条RewriteRule起作用。再往下的RewriteRule不管用。

他的意思是

如果不是文件也不是目录,才会把这条URL交给以下RewriteRule执行,很明显,这是一个条件语句,与IF作用相同,但没有end if 他只对下一条语句有用,执行完下一条自动end if.

亲自测试。

如果伪静态有很多条,有些与网站的目录和文件有冲突的,则需要在前加一个条件判断。

RewriteCond %{REQUEST_FILENAME} !-f  (如果不是文件,才会执行下一条RewriteRule)
RewriteCond %{REQUEST_FILENAME} !-d (如果不是目录,才会执行下一条RewriteRule)

切记,只生效下一条,再下一条就不管用了,再下一条则会以全局形式匹配,没有条件判断。

例:

我的伪静态是

1  域名/aaa/     转换成 index.php/?catname=aaa

2  域名/aaa/bbb/      转换成 index.php/?catname=aaa&catname2=bbb

但是如果phpmyadmin也会同样转换,样式路径  css/aaa/ 同样也会被转换

之前我做的伪静态规则是最上方写这2条判断,下面全部写下规则,但出现问题了。

我把1放到这2条判断语句下面,那么网站所有一级目录都没有问题,但二级目录就有问题,三级目录也没问题,因为没有三级目录的RewriteRule。

经过多方面寻找原因,终于找到,原来这2条判断语句,只能生效他的下一条RewriteRule规则。所以我必须写2个。

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^域名/aaa/      index.php/?catname=$1

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^域名/aaa/bbb/      index.php/?catname=$1&catname2=$2

如果有的伪静态规则是文件,而且与网站真实文件有冲突,则同理。不过一般不会出现什么问题。主要是目录。

最保险的写法就是每一条RewriteRule前面都写一个判断。

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^域名/aaa/(\d+).html      index.php/?catid=$2

这是我的亲自测试的结果,可能有些错误,希望多多交流。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇