Mat*_*ier 3 .htaccess http-status-code-404
我最近在我的.htaccess文件中添加了这么一点代码:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ $1.php [L,QSA]
Run Code Online (Sandbox Code Playgroud)
好的,我想,我明白这里发生了什么.如果找不到文档,删除PHP文件扩展名的这一小段代码会导致循环.这个循环导致500服务器错误而不是(正确的)404.不幸的是我很少理解这些重写实际上在做什么,所以我不知道如何重写它只是在文档存在时才触发这个重定向.
我做了一些阅读,我不确定Apache认为是什么"常规"文件.我的意思是它有效,但为什么第一行不能-f代替!-f呢?是-u完成这个的唯一方法吗?
Gum*_*mbo 20
您应该测试新路径是否指向现有文件:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [L,QSA]
Run Code Online (Sandbox Code Playgroud)
否则,您将获得无限递归(错误500).