一开始我想在重写规则里直接禁止php后缀的URL被访问但后来发现重写规则是递归调用的如果在重写规则里直接禁止php那么重写到php文件的规则也会失效RewriteEngineOn
RewriteRule^test$/testphp[L]
RewriteRule^testphp$$[FL]
递归调用这真可怕一开始访问/test的时候URL重写检查一次然后匹配到^test$就内部重定向到/testphp然而内部重定向也会触发URL重写因此再次检查匹配到^testphp$被强制直接[F](Forbidden)操作所以就变成了错误既然这样就必须判是否已经经过服务器重定向这时候服务器变量里有个REDIRECT_URL可以使用因此我试着用这个做判断
RewriteEngineOn
RewriteRule^test$/testphp[L]
RewriteCond%{REDIRECT_URL}^$
RewriteRule*$[FL]这样写访问/test依旧被稍微检查下发现RewriteCond中%{REDIRECT_URL}永远为空这就蛋疼了这样的话在重写规则中没办法直接禁止php了但是可以用不怎么华丽的方法实现就是在php文件中去判断REDIRECT_URL虽然这个方法可以实现但是感觉很逊只是目前为止也没找到什么更好的办法了
$_SERVER[REDIRECT_URL]ordie(Forbidden);
//这里只是显示文字而已实际使用的时候还需输出的HTTP错误代码
echo$_SERVER[REDIRECT_URL];//成功访问显示信息
?>
把这段PHP代码修改下丢进全局引用里就基本上没啥问题了虽然不是完美解决但是至少还是解决了以后也许会发现更好的方法