在htaccess中自定义503页到“/path/to/index.php?maintenance”?

时间:2014-03-03 01:25:55

标签: php .htaccess mod-rewrite

我有一个移动网站,我在名片上使用QR码。目前,当我将我的主网站进行维护时,我使用503重定向到maintenance.php。但这也取消了移动网站。我想要实现的是我的移动网站以及该目录中的所有文件和文件夹(/ qr /)在维护模式下仍然可以访问。此外,我想将访问者重定向到我的移动名片,并向他们显示他们正在访问替代网站的消息。

我的移动名片位于mydomain.com/qr/。我在/qr/index.php的<body>标记之后添加了这个:

<?php if(isset($_GET["maintenance"])) {
header('HTTP/1.1 503 Service Temporarily Unavailable');
echo '<div class="maintenance">Our website is currently undergoing maintenance. You are now viewing our mobile business card as a substitute. Our apologies for any inconvenience, we will be back shortly.</div>';
}
else{}
?>

所以我希望我的503错误页面为mydomain.com/qr/?cp=xxxxx&maintenance(其他内容我需要cp。)

我试过的其中一件事是,我在根文件夹中将以下内容设置为我的.htaccess:

RewriteEngine On

Alias /qr/index\.php "/qr/index.php?cp=xxxxx&maintenance"

RewriteCond %{REMOTE_ADDR} !^xxx\.xxx\.xxx\.xxx$
RewriteCond %{REQUEST_URI} !/qr/$
RewriteCond %{REQUEST_URI} !\.(css|png|vcf)$
RewriteRule .* /qr/index\.php [L]

但是我收到了500内部服务器错误。我读过/path/to/503.php需要使用别名的地方,因此我有理由这样做。

我做错了什么,我怎样才能达到预期的效果?

干杯,

Webgremlin

3 个答案:

答案 0 :(得分:3)

使用Jon的提示,我通过将htaccess更改为此来获得了我想要的结果:

#BEGIN 503 Maintenance
ErrorDocument 503 /qr/index.php?cp=xxxxx&maintenance
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^xxx\.xxx\.xxx\.xxx$
RewriteCond %{REQUEST_URI} !^/qr/.*$
RewriteRule .* - [R=503,L]
#EINDE 503 Maintenance

我还必须将<base href="http://www.mydomain.com/qr/" />添加到我的/qr/index.php文件的头部。否则它会尝试从mydomain.com/style.css和mydomain.com/images加载我的css和图像,而不是从mydomain.com/qr /.

加载

希望这有助于某人。

答案 1 :(得分:2)

使用错误文档有什么问题?

ErrorDocument 503 /qr/index.php?cp=xxxxx&maintenance

答案 2 :(得分:1)

您收到错误是因为.htaccess中不允许Alias命令。它只能放在像httpd.conf这样的Apache配置中。