Это кажется очень простым. ErrorDocument
перенаправление на другую страницу:
RewriteEngine On
ErrorDocument 400 /err/e=400
ErrorDocument 401 /err/e=401
ErrorDocument 403 /err/e=403
ErrorDocument 404 /err/e=404
ErrorDocument 500 /err/e=500
Но проблема с этими пользовательскими страницами ошибок в том, что браузер фактически перенаправляет на страницу /err/e=404
вместо того, чтобы просто показывать его содержание. Если пользовательские страницы ошибок не используются, URL-адрес в браузере остается прежним, что позволяет пользователю исправить URL-адрес без необходимости его повторного ввода.
Вопрос: Как создать пользовательские страницы ошибок, которые делают не изменить URL и оставить его как domain.tld/nonexistantfile
?
Фон: Используются Debian Wheezy, Apache2 и PHP.
Обновить размещение всего файла .htaccess
RewriteEngine On
ErrorDocument 400 /err/e=400
ErrorDocument 401 /err/e=401
ErrorDocument 403 /err/e=403
ErrorDocument 404 /err/e=404
ErrorDocument 500 /err/e=500
RewriteRule ^favicon.ico$ favicon.ico [L]
RewriteRule ^css/(.*) css/$1 [L]
RewriteRule ^downloads/(.*) downloads/$1 [L]
RewriteRule ^images/(.*) images/$1 [L]
RewriteRule ^js/(.*) js/$1 [L]
RewriteRule index.php(.*) index.php$1 [L]
RewriteRule ^(.*)/(.*=.*) index.php?controller=$1&$2 [L]
RewriteRule ^(.*=.*) index.php?$1 [L]
RewriteRule ^(.*) index.php?controller=$1 [L]
Последняя часть включает URL как /home
или же page1/page2/param=123
Вы должны иметь правило, чтобы избежать перезаписи для реальных файлов / каталогов, как это:
ErrorDocument 400 /err/e=400
ErrorDocument 401 /err/e=401
ErrorDocument 403 /err/e=403
ErrorDocument 404 /err/e=404
ErrorDocument 500 /err/e=500
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]
RewriteRule ^([^/]+)/([^=]+=.*)$ index.php?controller=$1&$2 [L,QSA]
RewriteRule ^([^=]+=.*)$ index.php?$1 [L,QSA]
RewriteRule ^(.+)$ index.php?controller=$1 [L,QSA]
Я также удалил некоторые избыточные правила.
Других решений пока нет …