2015-04-26 38 views
2

我有一個自定義的404錯誤重定向頁面通過htaccess工作得很好。但是,在向htaccess添加新代碼後,它停止工作。什麼導致了衝突,我該如何解決?htaccess 404停止工作

編輯:我試過把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 
+0

替換當前的代碼把ErrorDocument的聲明在文件的頂部。 – Martin

+0

我試過,實際上,它仍然不起作用。 : -/ – jamiestroud69

回答

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 
0

放的ErrorDocument語句在文件的頂部。在RewriteEngine聲明之上。

這是解決方案,但我不能告訴你爲什麼上面的htaccess代碼導致失敗。

+0

我試過,實際上,它仍然不起作用。 : -/ – jamiestroud69

+0

文件/404.html是否存在? – Martin

+0

將語句放在重寫引擎聲明的上方,位於文件 – Martin