4

这些天,我发现自己经常将静态网站迁移到基于 WordPress 的网站。在测试服务器上完成 WordPress 网站的开发后,我想将其安装在当前网站域上,但不影响旧的静态站点 - 直到站点上线。

我的想法是将当前的非 WordPress 网站移动到一个文件夹/old/,并将所有请求重写到该文件夹​​(因此出于 SEO 目的,保持所有 url 相同)。

为了让我自己和其他授权人通过我想检查一个 cookie(这将通过一个简单的“登录”php 文件设置,因为我不能依赖静态 IP 地址)或者当前日期和时间是否在直播之后日期然后让 WordPress 重写规则按照他们的方式授予对 WordPress 网站的访问权限。

这也将允许我在当前或旧站点上添加一个简单的倒数计时器,之后新站点将在上线日期自动上线。

我的简单 login.php 脚本是这样的:

<?php
setcookie("login", "loggedin", time()+3600,"/");
?>
<h3>Welcome, you are logged in</h3>
<p><a href="/">Click here to visit the home page</a></p>

我认为以下可能是实现这一目标的最佳方法,但它不起作用(我收到内部服务器错误)。第一部分检查登录 cookie 是否存在,如果不存在,并且当前日期和时间在 2012 年 7 月 20 日晚上 8 点之前,它将重写对/old/文件夹的所有请求。我已修改 WordPress 重写部分以排除该/old/文件夹。

RewriteCond %{HTTP_COOKIE} !^.*login.*$ [NC]
RewriteCond %{TIME} < 20120720200000
RewriteCond %{REQUEST_URI} !^/old/
RewriteRule (.*) http://domain.com/old/$1 [L]

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_URI} !^/(old/.*)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

有人可以帮助我实现我想要实现的目标吗?

4

2 回答 2

3

RewriteCond指令接受2 个参数,但在比较时您给它 3 %{TIME},这会导致 apache 返回 500 服务器错误。如果您查看RewriteCond 中的字典比较,则比较器后面不能有空格(mod_rewrite 是一种像那样的愚蠢)。所以这条线需要看起来像这样:

# no space here -----V
RewriteCond %{TIME} <20120720200000

那应该处理 500 服务器错误。

关于您的规则的另一件事是规则的目标 ,http://domain.com/old/$1将导致 apache 进行 302 重定向,因为您将 包含http://domain.com在目标中。如果您希望它在内部重写(因此浏览器地址栏中的 URL 不会更改),则需要删除该位。

于 2012-07-15T20:18:53.267 回答
0

一种更简单的方法是安装名为维护模式的插件

然后为主题创建一个 503.php。

将此添加到文件的开头:

<?php if (!is_user_logged_in())
{
    header("Location: http://example.com/old");
}
else
{
  //WHATEVER YOU LIKE
}?>

这样,登录用户可以浏览 WP 网站,而其他用户将被重定向到 /old 网站。

用户必须事先登录@http: //example.com/wp-login.php

于 2012-07-14T22:29:26.953 回答