我有一个处于 beta 模式的网站,我也有一个 LaunchRock 页面设置。我需要进行设置,以便 mydomain.com 指向启动页面 (signup.mydomain.com) 但仍显示 mydomain.com。但是,我仍然需要通过访问 mydomain.com/beta 来访问 beta 站点,而无需将该站点从当前目录中移出。有什么方法可以通过 Apache .htaccess Redirect 来实现吗?
2 回答
在没有实际重定向的情况下,我无法让您的第一个要求自己工作,直到我看到 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,只需将其更改为其他内容。
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/