htaccess 404停止工作

时间:2015-04-26 09:50:05

标签: apache .htaccess mod-rewrite

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

编辑:我已经尝试将ErrorDocument行放在页面顶部但它仍然无法正常工作。

htaccess代码:

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

2 个答案:

答案 0 :(得分:2)

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

由于您的规则(重写为php扩展名),您有一个无限循环 您需要在重写之前检查它是否存在,否则您的规则与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

答案 1 :(得分:0)

将errorDocument语句放在文件的顶部。在RewriteEngine声明之上。

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