如何从子域中的文件夹重定向到主域

时间:2011-11-08 15:16:00

标签: mod-rewrite redirect login subdomain phpbb3

其他信息......

即使您在自己的网页上使用外部登录表单,PHPBB也可以在登录之后重定向您的页面。然而,他们认为它应该是您自己领域内的相对路径。如果你在像forum.mydomain.com这样的子域上有论坛,那就不太好了......

来自their wiki的示例:<input type="hidden" name="redirect" value="./somefile.html" />

要解决子域的问题,我想我会添加一个首页重定向指示,如<input type="hidden" name="redirect" value="./redirect/frontpagenews.php" />

因此,如果您使用页面http://mysite.com/frontpagenews.php上的登录表单,则论坛重定向网址最终看起来像forum.mysite.com/redirect/frontpagenews.php(这样可行,论坛会创建此链接以在登录后返回)。所需要的只是一个重写规则来检测这个,所以它实际上会把你送回http://mysite.com/frontpagenews.php

问题......

如何从forum.mysite.com/redirect/*anything*转到mysite.com/*anything*

我已经有一段时间了,我认为下面的代码应该有效,但事实并非如此。我把它放在forum.mysite.com的htaccess文件中的其他论坛重写规则之上,因为它可能应该没问题,如果它是第一个被检查的规则。

RewriteCond %{HTTP_HOST} ^forum\.mysite\.com/redirect/(.*)$ [NC]
RewriteRule (.*) http://mysite\.com/$1 [QSA,L,NC]

也试过这个条件,但没有快乐:

RewriteCond %{REQUEST_URI} /redirect/(.*)$ [NC]

1 个答案:

答案 0 :(得分:0)

HTTP_HOST仅匹配主机名,而不是路径。该路径必须是RewriteRule的一部分。假设您正在编辑的.htaccess文件位于forum.mysite.com根目录中(如相当于:forum.mysite.com/.htaccess),它应如下所示:

RewriteCond %{HTTP_HOST} ^forum\.mysite\.com$ [NC]
RewriteRule ^redirect/(.+)$ http://mysite.com/$1 [L,NC,R]

您不需要规则括号中的QSA,因为无论如何都会追加查询字符串(除非目标中有?,例如http://mysite.com/$1?p=1)。

这会将浏览器从forum.mysite.com/redirect/*anything*重定向到mysite.com/*anything*