2013-04-04 120 views
0

问题htaccess的 - 从子域根重定向到子域的文件夹(mod_rewrite的/ mod_proxy的)

我试图从一个子域,例如根文件夹重定向sub.example.com)分配给子域的子目录并将子域保持在地址栏中,例如, sub.example.com/subdir1

这不是我第一次使用mod_rewrite,但我不是专家。我以前没有使用过mod_proxy,但我相信这将是这项任务所必需的。


背景

这是我工作的一个项目,其中主网络是私人的一部分,但服务器不能修改。我需要使用他们的工具指定所有子域,而不是创建自己的重写。这个问题涉及一个被用作开发网站的子域,它最终将在没有子域的情况下生效。当它开始运行时,sub.example.com将变为sub.com。我无法简单地将子域的根文件夹设置为我重定向到的目录的原因是,该项目的代码库很大程度上依赖于内部链接管理的DOCUMENT_ROOT,而目标文件夹sub.example.com/subdir1不是根的网站。


我做了什么

我会说,我已经超过了我指定的时间在这个问题上的工作,主要是出于兴趣开始。

我已经做了大量的研究,并试图从我看过的来源中提取零碎。但是,我所查看的所有资源中除one之外的所有资源都只有从子域重定向到网站根目录的子目录的信息。 sub.example.com - >example.com/root-subdir。实际上,上述页面确实有与我的问题有关的信息的唯一原因是因为提问的用户意外地做了我目前正在尝试做的事情。不幸的是,他所做的仍然不适合我。下面是我想现在(但给了我一个“310 - 重定向过多”的错误):

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^sub\.example\.com 
RewriteRule^/subdir1/ [R=301,L] 

如前所述,我认为我可能需要使用mod_proxy这一点,但我有不知道会是什么样子。


任何帮助,你可以给予非常感谢。感谢您的帮助! :)

+2

在规则之前添加此'RewriteCond%{REQUEST_URI}!/ subdir1 [NC]'以防止出现循环。 – 2013-04-04 18:38:58

回答

-1

由@faa评论中给出的解决方案没有完全解决我的问题,因为我真正的错误忘记了匹配子域的根目录和根目录。 @faa确实,但是让我回到正确的轨道上,并回答了我关于防止循环的问题。我使用他的代码片段获得的信息让我意识到我需要什么,我在解决方案中发现了this ServerFault问题。

我的最终解决方案是:

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^sub\.example\.com [NC] 
RewriteCond %{REQUEST_URI} ^/$ 
RewriteRule ^(.*)$ /subdir1/ [R=301,L] 


谢谢大家的帮助!

2

现在,如果你想重定向只是sub.example.comsub.example.com/subdir1,那么试试这个:

RewriteCond %{HTTP_HOST} ^sub.example.com 
RewriteRule ^/?$ /subdir1 [R=301] 
+0

这是我已经尝试的解决方案 - 不幸的是,我需要在服务器的工具中指定子域,以防止我为该重定向更新'RewriteRule',并且此解决方案无限追加'/ root-of-sub/subdir1'到我的URL的末尾。如果这实际上是解决方案,那么如果所请求的URL已被重新写入'sub.example.com/subdir1',我将需要一个规则来防止重定向。不幸的是,我没有尝试过的任何条件。 – 2013-04-04 17:55:39

+0

什么?您能否列出已经重写到'sub.example.com/subdir1'中的所有网址以及您想要重写的动态网址以及要复制的网址? – 5ervant 2013-04-04 18:20:37

+0

目前只有一个URL被重定向:'example.com/root-of-sub' - >'sub.example.com'(这是我无法控制的重定向)。现在我想添加以下重定向:'sub.example.com' - >'sub.example.com/subdir1'。 – 2013-04-04 18:26:59