Я могу протестировать вышеуказанное, без 3 строк RewriteCond% {TIME_, успешно на https://htaccess.madewithlove.be/
Инструмент тестера MWL неверен. Когда вы указываете статус возврата за пределами диапазона 3xx, тогда строка подстановки игнорируется, и вместо этого предоставляется документ об ошибке для соответствующего кода состояния (или ответ сервера по умолчанию, если ErrorDocument
не был явно определен) . Итак, вам нужно определить пользовательский ErrorDocument
для статуса 503.
Не уверен, почему вы получите ошибку 500, поскольку в опубликованных вами директивах нет ничего плохого , кроме упомянутого выше.
Однако вы должны быть осторожны, чтобы сам документ с ошибкой не инициировал ответ 503, поскольку это привело бы к бесконечной ошибке l oop (500). Вы также должны быть осторожны, чтобы любые связанные ресурсы (изображения, CSS, и c.) Также не были заблокированы. (Хотя вы еще не дошли до обслуживания своего документа об ошибке).
Попробуйте вместо этого следующее:
RewriteEngine On
ErrorDocument 503 /503-Wednesday-1900CET.php
RewriteCond %{REQUEST_URI} ^/forum(/.*|$) [NC,OR]
RewriteCond %{REQUEST_URI} ^/timeline(/.*|$) [NC]
RewriteCond %{TIME_WDAY} =3
RewriteCond %{TIME_HOUR}%{TIME_MIN} >1654
RewriteCond %{TIME_HOUR}%{TIME_MIN} <1715
RewriteRule !^503 - [R=503]
Обратите внимание, что строка подстановки в Директива RewriteRule
- это всего лишь один дефис (-
), указывающий на отсутствие подстановки (она все равно игнорируется).
Шаблон !^503
гарантирует, что сам документ об ошибке не приведет к ответу 503 (по сути, бесконечный l oop, который приведет к ответу сервера по умолчанию с ошибкой с дополнительным сообщением типа «произошла ошибка 500 при попытке обслуживания ErrorDocument для обработки запроса».) Аналогичным образом вам потребуется убедитесь, что все связанные ресурсы также не попадают под это правило. Как правило, предпочтительнее иметь ответ 503 как basi c, насколько это возможно.
Вам не нужен флаг L
при указании кода состояния за пределами диапазона 3xx.
Я удалил директиву RewriteBase /
, поскольку она здесь не требуется. Однако, если у вас есть другие директивы, которые полагаются на это, то, очевидно, добавьте его обратно.
Строго говоря, ответ 503 также должен сопровождаться Retry-After
заголовком ответа HTTP, содержащим время ожидаемого возврата службы. (Я предполагаю, что вы устанавливаете это в своем сценарии PHP.)