.htaccess & amp; страницы ошибок — оставайтесь на странице и не перенаправляйте

Это кажется очень простым. 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

1

Решение

Вы должны иметь правило, чтобы избежать перезаписи для реальных файлов / каталогов, как это:

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]

Я также удалил некоторые избыточные правила.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]