2017-02-18 17 views
0

Я бы хотел временно перенаправить весь трафик с example.com на страницу обслуживания и вернуть код 503. Я создал страницу maintenance.html:Apache2 перенаправить на страницу обслуживания - отсутствующие изображения

<!DOCTYPE html> 
<html> 
<head> 
    <title>We'll be back!</title> 
    <link href="css/main.css" rel="stylesheet" media="screen"> 
    <link href="css/bootstrap.min.css" rel="stylesheet" media="screen"> 
</head> 
<body style="background-color: #red"> 
<div> 
    <div id="header-row" class="row"> 
     <img src="/images/header-logo.png" alt="loogo" class="img-responsive center-block"> 
    </div> 
</div> 
<script src="http://code.jquery.com/jquery.js"></script> 
<script src="/js/bootstrap.min.js"></script> 
<script src="/js/main.js"></script> 
</body> 
</html> 

Я положил страницы HTML, CSS, JS и изображений папки в корневую папку документов. Тогда я приложил файл apache2.2 конфигурации со следующими линиями:

RewriteEngine On 

#prevent from recursiv redirection 
RewriteCond %{SCRIPT_FILENAME} !maintenance.html 
RewriteCond %{REQUEST_URI} !(js|css|images)$ 
RewriteCond %{REQUEST_FILENAME} !.*\.p 
RewriteCond %{REQUEST_FILENAME} !-f 

#503 and redirect 
RewriteRule ^.*$ /maintenance.html [R=503,L] 
ErrorDocument 503 /maintenance.h 

#do not cache 
Header Set Cache-Control "max-age=0, no-store" 

Все вызовы перенаправляются на страницу maintenance.html, но не отображаются изображения. Я попытался исправить это, добавив:

RewriteCond %{REQUEST_FILENAME} !-d 

, но затем перенаправление остановлено. Странно, что добавление RewriteCond% {REQUEST_URI}! (Js | css | images) $ исправило проблему с отсутствующими стилями, но изображения по-прежнему перенаправлены. Что я делаю неправильно?


EDIT 1:

Я проверил, как браузер ищет заголовок-logo.png. Адрес был http://example.com/images/header-logo.png, поэтому я добавил для тестирования следующего правила:

RewriteCond %{REQUEST_URI} !^/images/header-logo\.png$ 

, но это тоже не помогло ....

ответ

0

Постановили: Я честно не знаю, почему это произошло, но проблема заключалась в том, что апач не может получить доступ к папке изображений. Как только я переименовал его в img, все стало работать нормально.

1

Вы можете использовать его как это:

ErrorDocument 503 /maintenance.html 

#do not cache 
Header Set Cache-Control "max-age=0, no-store" 

RewriteCond %{REQUEST_URI} !/(js|css|images)/ [NC] 
RewriteCond %{REQUEST_URI} !\.(?:jpe?g|gif|bmp|png|ico|tiff|css|js|p[a-z]*)$ [NC] 
RewriteRule !^maintenance\.html$ /maintenance.html [L,NC] 
+0

Я пробовал, и результат был довольно неожиданным, перенаправление не сработало, и на главной странице отсутствовали стили и образы (только чистый текст). – orim

+0

У вас должен быть полный путь к js/css, например '' ИЛИ иначе вы можете добавить это чуть ниже '' в HTML: ' ' – anubhava

+0

Я пробовал обновленную версию, но она привела страницу вниз Ошибка: сервис временно недоступен. Может быть, это вызвано «!» в RewriteRule? – orim

1

What do I do wrong?

Состояние

RewriteCond %{REQUEST_URI} !(js|css|images)$ 

соответствует всем запросам завершено в js, css и images. Это включает, конечно, все *.js (Javascript), *.css (Стили). Но он не включает файлы изображений, потому что эти файлы заканчиваются на .png или .jpg, а не в images.

Чтобы иметь состояние для каталогов , вы не должны привязывать шаблон к концу, а скорее прикладывать его косыми чертами, например.

RewriteCond %{REQUEST_URI} !/(?:js|css|images)/ 

То, что я не понимаю, почему Перенаправление происходит на всех, потому что

RewriteCond %{REQUEST_FILENAME} !-f 

уже должно быть достаточно. Но это также предотвращает переписывание для любых существующих других файлов.


Минимальный набор правил может быть

RewriteCond %{REQUEST_URI} !^/maintenance\.html$ 
RewriteCond %{REQUEST_URI} !/(?:js|css|images)/ 
RewriteRule^- [R=503,L] 

ErrorDocument 503 /maintenance.html 
+0

. Я пробовал этот набор, и изображения все еще не отображаются, а Chrome-> Inspect показывает «503 (Услуга временно недоступна) "для каждого изображения. – orim

+0

Затем происходит что-то еще, потому что в тестовой среде изображение загружается должным образом. –

+0

Есть ли у вас какие-либо идеи, что еще может быть неправильным? – orim