我有一个带有htaccess的个性化页面404
ErrorDocument 404 /404.php
它工作正常,但它需要所有.jpg,.js,.css等...... 我希望它只需要.php并为所有其他人执行正常的404错误。
我没有在任何地方找到这个选项。
非常感谢。
答案 0 :(得分:5)
不确定但尝试一下:
<Files ~ "\.php$">
ErrorDocument 404 /404.php
</Files>
引自Files Directive文档:
&lt; Files&gt;指令限制了所附的范围 文件名指令。
答案 1 :(得分:2)
有一些可能的方法,但我会做以下其中一种:
您可以按照@LazyOne的建议,使用mod_rewrite
仅将.php
扩展名的文件重定向到自定义文档:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f # Only redirect to error for files that don't exist
RewriteRule ^(.*)\.php$ /404.php [L]
或者您可以像通常那样通过PHP错误处理程序指导所有内容,并使用PHP来确定所请求的资源是否是PHP脚本:
<?php
if (strtolower(substr($_SERVER['SCRIPT_URL'], -4)) != '.php') {
// If the requested resource does not have a .php extension, include the standard error doc and exit
include '404.html';
exit;
}
// Handle .php 404s here
第二种方法的缺点是您可能需要重写标准错误文档,以便它使用PHP来获取要显示给用户的动态信息,例如所请求的资源路径。
答案 2 :(得分:1)
利用$_SERVER['REQUEST_URI']
,您可以轻松检查导致错误的文件的结尾,然后如果它不符合您的需要或仅渲染不同的404,则将标头抛出到正常404 / p>
将它放在404.php文件中
$bad_url = $_SERVER['REQUEST_URI'];
$bad_extension = substr(strrchr($bad_url,'.'),1);
if($bad_extension != "php"){
//Not PHP
}else{
//PHP
}