ErrorDocument & Mod Rewrite
Мне было интересно, есть ли способ использовать Mod Rewrite для обработки всех возможных кодов ошибок состояния http (4XX и 5XX) вместо объявления их всех в htaccess, например:
# serve custom error pages
ErrorDocument 400 error.php?code=400
[...]
ErrorDocument 510 error.php?code=510
Где-то вокруг я нашел этот маленький трюк:
# provide a universal error document
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ error.php [L]
Но разве это не обрабатывает только 404? Если все в порядке, как я могу изменить правило перезаписи кэша, чтобы оно также обрабатывало эту функцию?
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)\.\d+\.(css|js)$ $1.$2 [L]
Мне нужно что-то вроде:
IF %{REQUEST_URI} MATCHES "^(.+)\.\d+\.(css|js)$"
REWRITE TO "$1.$2"
ELSE
REWRITE TO "error.php"
Не могли бы вы мне помочь? Большое спасибо!
1 ответ
Ожидаете ли вы, что какая-то новая волна кодов состояния HTTP появится в Интернете в ближайшем будущем, и вы не сможете просто составить список из 10 или около того кодов ошибок, которые указывают на правильные соответствующие документы? Вы действительно должны просто просмотреть список кодов состояния HTTP и выбрать, какие из них ваш сервер фактически будет использовать, и установить для них документы об ошибках. Обычный веб-сервер, вероятно, будет когда-либо видеть только 404 и 500, возможно, 403, если разрешения не были настроены правильно, и, возможно, 509, если вы используете общий веб-сервис (хотя я думаю, что один из них обрабатывается хостинг-провайдер в любом случае). Если вы не создаете какой-то очень продвинутый веб-сервер, который может делать множество разных вещей, вы просто тратите впустую микроскопическое время своего веб-сервера на поиск всех тех кодов ошибок, которые он никогда не будет использовать.
А если серьезно, не перечисляйте каждый код состояния от 400 до 510. Серьезно. Многие из них будут кодами состояния, которые вы вручную отправляете из исполняемого скрипта, когда он определяет, что что-то не так.