Apache htaccess 404停止工作

Apache htaccess 404停止工作,apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,我有一个自定义的404错误重定向页面,通过htaccess可以正常工作。然而,在向htaccess添加新代码后,它停止了工作。是什么导致了冲突?我如何解决冲突 编辑:我试着把ErrorDocument行放在页面顶部,但仍然不起作用 访问代码: RewriteEngine On #Removes www RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] RewriteRule . http://%1%{REQUEST_URI} [R=301,L] #Redir

我有一个自定义的404错误重定向页面,通过htaccess可以正常工作。然而,在向htaccess添加新代码后,它停止了工作。是什么导致了冲突?我如何解决冲突

编辑:我试着把ErrorDocument行放在页面顶部,但仍然不起作用

访问代码:

RewriteEngine On

#Removes www
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule . http://%1%{REQUEST_URI} [R=301,L]

#Redirects to extensionless php urls
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^&\ ]+).php
RewriteRule .* /%1? [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ $1.php [L]

#Redirect nonexistent files to a 404 page (not working)
ErrorDocument 404 /404.html

将errorDocument语句放在文件的顶部。在重写引擎语句上方


这就是解决方案,但是我不能告诉你为什么上面的htaccess代码会导致失败

问题不在于将
ErrorDocument
放在htaccess的顶部或底部

由于您的规则(重写到
php
extension的规则),您有一个无限循环。
您需要在重写它之前检查它是否存在,否则您的规则和
ErrorDocument
之间会出现循环冲突

您可以用此代码替换当前代码

RewriteEngine On

#Remove www
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]

#Hide php extension (only for existing files)
RewriteCond %{THE_REQUEST} \s/(.+)\.php(?:\s|\?) [NC]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ /%1? [R=301,L]

#Redirect to extensionless php urls (only if it exists)
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ /$1.php [L]

#Redirect nonexistent files to a 404 page
ErrorDocument 404 /404.html

把errorDocument语句放在文件的顶部。我试过了,实际上,它仍然不起作用-/文件/404.html是否存在?将该语句放在重写引擎语句上方,在文件的最顶端,我个人发现在上传和应用URL之间有时会有一两分钟的延迟。htaccess文件:-/Yes,404.html存在。此外,当我删除所有其他代码时,404错误重定向立即起作用。每次更新htaccess时,我都会刷新页面。