0

我有一个处于 beta 模式的网站,我也有一个 LaunchRock 页面设置。我需要进行设置,以便 mydomain.com 指向启动页面 (signup.mydomain.com) 但仍显示 mydomain.com。但是,我仍然需要通过访问 mydomain.com/beta 来访问 beta 站点,而无需将该站点从当前目录中移出。有什么方法可以通过 Apache .htaccess Redirect 来实现吗?

4

2 回答 2

0

在没有实际重定向的情况下,我无法让您的第一个要求自己工作,直到我看到 Clemens 关于代理的回答,所以我将它合并到这里。

RewriteEngine On

#Redirect to signup.mydomain.com if not requesting /beta
RewriteCond %{REQUEST_URI} !^/beta(/|$)
RewriteCond %{QUERY_STRING} !beta=true
RewriteRule (.*) http://signup.mydomain.com/$1 [P]

#Strip /beta and append beta=true query string
RewriteCond %{REQUEST_URI} ^/beta
RewriteRule beta(.*) $1?beta=true [QSA]

这基本上从您的查询中删除 /beta 并将 beta=true 查询附加到您的查询字符串是什么。然后它第二次检查这个新的查询字符串。

如果您在程序中的某处使用 beta=true,只需将其更改为其他内容。

于 2013-02-08T22:13:53.767 回答
0

mod_rewrite希望在这里成为您的朋友,如果您将以下.htaccess文件放在文档根目录中(或者最好将其放在 apache 配置文件中,或者conf.d如果您的安装有一个目录 - 如果您在那里有写访问权限)。

RewriteEngine On

RewriteCond %{PATH_INFO} !^/beta
RewriteRule (.*) http://signup.mydomain.com/$1 [P]

它应该如何工作?

第一行激活重写(如果已经打开,可能不需要)。

下一行定义了一个条件:如果 url 的路径以 开头/beta,则不要在下一行应用该规则。(^/beta是正则表达式,!前面的表示不匹配就应用。)

最后一行首先说匹配传入的“所有内容”并将其发送到http://signup.mydomain.com/,附加任何传入的内容。[P]说“代理”它,即 apache 本身将请求 url 并将它得到的响应发送到浏览器,所以浏览器中的url不会改变。

警告:这仅适用于 apache 本身可以连接到http://signup.mydomain.com/. 这有时不起作用,尤其是如果此域位于同一服务器上。

RTFM 了解更多信息: http ://httpd.apache.org/docs/2.4/rewrite/

于 2013-02-08T22:08:18.987 回答