Apache2 重定向到维护页面 - 缺少图像
Apache2 redirect to maintenance page - missing images
我想暂时将所有流量从 example.com 重定向到维护页面和 return 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$
但这也没有帮助....
你可以这样使用它:
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]
What do I do wrong?
条件
RewriteCond %{REQUEST_URI} !(js|css|images)$
匹配 ending 在 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
已解决:老实说,我不知道为什么会这样,但问题是 apache 无法访问图像文件夹。一旦我将它重命名为 img,一切就开始正常工作了。
我想暂时将所有流量从 example.com 重定向到维护页面和 return 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$
但这也没有帮助....
你可以这样使用它:
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]
What do I do wrong?
条件
RewriteCond %{REQUEST_URI} !(js|css|images)$
匹配 ending 在 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
已解决:老实说,我不知道为什么会这样,但问题是 apache 无法访问图像文件夹。一旦我将它重命名为 img,一切就开始正常工作了。