Apache2重定向到维护页面 - 缺少图像

时间:2017-02-18 17:04:27

标签: apache .htaccess maintenance

我想暂时将所有来自example.com的流量重定向到维护页面并返回503代码。我创建了maintenance.html页面:

<!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:

我查看了浏览器如何搜索header-logo.png。地址为http://example.com/images/header-logo.png,因此我添加了测试以下规则:

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

但这也没有用......

3 个答案:

答案 0 :(得分:2)

  

我做错了什么?

条件

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

匹配jscssimages中的所有结尾请求。这包括所有*.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

答案 1 :(得分: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]

答案 2 :(得分:0)

已解决:老实说,我不知道为什么会这样,但问题是apache无法访问images文件夹。一旦我将它重命名为img,一切都开始正常工作。