问题
我正在尝试从子域的根文件夹重定向,例如sub.example.com
,到子域的子目录,并将子域保留在地址栏中,例如sub.example.com/subdir1
。
这不是我第一次使用mod_rewrite
,但我不是专家。我之前没有使用过mod_proxy
,但我相信这项任务需要它。
的背景
这是我正在处理的项目的一部分,其中web-host是私有的,但是服务器无法修改。我需要使用他们的工具指定所有子域,而不是自己创建重写。该问题涉及用作开发站点的子域,该子域最终将在不是子域的情况下生效,例如,它会在sub.example.com
上线时变为sub.com
。我不能简单地将子域的根文件夹设置到我重定向到的目录的原因是项目的代码库在很大程度上依赖于DOCUMENT_ROOT
内部链接管理和目标文件夹{{ 1}},不是网站的根。
我做了什么
我首先要说的是,我已经超出了规定的时间来处理这个问题,主要是出于兴趣。
我已经做了很多研究,并试图从我所看到的来源中汲取点点滴滴。但是,除了one之外,我查看的所有来源都只有从子域重定向到站点根目录的子目录的信息,例如: sub.example.com/subdir1
- > sub.example.com
。事实上,上述页面确实有与我的问题相关的信息的唯一原因是因为提出问题的用户意外地做了我目前正在尝试做的事情。不幸的是,他所做的仍然不适合我。这是我现在正在尝试的(但是给了我一个“310 - 太多的重定向”错误):
example.com/root-subdir
如前所述,我认为我可能需要使用RewriteEngine on
RewriteCond %{HTTP_HOST} ^sub\.example\.com
RewriteRule ^ /subdir1/ [R=301,L]
,但我不知道它会是什么样子。
您可以给予任何帮助,我将不胜感激。谢谢您的帮助! :)
答案 0 :(得分:2)
现在,如果您想将sub.example.com
重定向到sub.example.com/subdir1
,请尝试一下:
RewriteCond %{HTTP_HOST} ^sub.example.com
RewriteRule ^/?$ /subdir1 [R=301]
答案 1 :(得分:-1)
@faa在评论中给出的解决方案并没有完全解决我的问题,因为我真正的错误是忘记匹配子域的根,只有根。然而@faa确实让我回到了正确的轨道,并回答了我关于防止循环的问题。我使用他的代码片段获得的信息让我意识到我需要的东西,这是我在this ServerFault问题的解决方案中找到的。
我的最终解决方案如下:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^sub\.example\.com [NC]
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^(.*)$ /subdir1/ [R=301,L]
谢谢大家的帮助!