0

问题

我正在尝试从子域的根文件夹重定向到子域sub.example.com的子目录,并将子域保留在地址栏中,例如sub.example.com/subdir1

这不是我第一次使用mod_rewrite,但我不是专家。我以前没有使用mod_proxy过,但我相信这个任务需要它。


背景

这是我正在处理的项目的一部分,其中网络主机是私有的,但服务器无法修改。我需要使用他们的工具指定所有子域,而不是自己创建重写。这个问题与用作开发站点的子域有关,该子域最终将在不成为子域的情况下上线,例如在上线时sub.example.comsub.com变为。我不能简单地将子域的根文件夹设置为我要重定向到的目录的原因是项目的代码库严重依赖于DOCUMENT_ROOT内部链接管理,而目标文件夹sub.example.com/subdir1不是地点。


我做了什么

我首先要说我已经超出了我分配的时间来解决这个问题,主要是出于兴趣。

我做了很多研究,并试图从我看过的资料中提取点点滴滴。但是,除了我查看的来源之一之外,所有来源都只有从子域重定向到站点根目录的子目录的信息,例如sub.example.com-> example.com/root-subdir。事实上,上述页面确实包含与我的问题相关的信息的唯一原因是因为提出问题的用户不小心做了我目前正在尝试做的事情。不幸的是,他所做的仍然对我不起作用。这是我现在正在尝试的(但给了我“310 - 重定向太多”错误):

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

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


您可以提供的任何帮助将不胜感激。感谢您的帮助!:)

4

2 回答 2

2

现在,如果您只想重定向sub.example.comsub.example.com/subdir1,请尝试一下:

RewriteCond %{HTTP_HOST} ^sub.example.com
RewriteRule ^/?$ /subdir1 [R=301]
于 2013-04-04T17:48:59.803 回答
-1

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

我的最终解决方案如下:

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


感谢大家的帮助!

于 2013-04-04T19:07:52.697 回答