2017-02-18 51 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和images文件夹放到文档根文件夹中。然后,我附有以下行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)$修复了丢失样式的问题,但图像仍然被重定向。我做错了什么?


编辑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,cssimages。这当然包括所有*.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

我试过这一套,图像仍然不存在,铬 - >检查显示“503 (服务暂时不可用)“。 – orim

+0

然后还有其他事情正在进行,因为在我的测试环境中图像加载得很好。 –

+0

你知道还有什么可能是错的吗? – orim