使用.htaccess将所有请求从子域重定向到主域

时间:2012-02-05 19:34:30

标签: .htaccess drupal dns shared-hosting subdomain

我有一个针对许多不同项目的业余爱好网站,并希望每个项目都拥有自己的子域名,如foo.domain.com,bar.domain.com等。

我将Drupal与Domain Access模块​​一起使用,这意味着所有子域都应该指向Drupal的基本安装,然后模块会识别请求来自哪个子域并根据该页面提供页面。

现在,由于这只是一个爱好项目,我将它保存在免费的共享主机帐户上,这意味着一些限制:

  • 没有通配符子域。
  • 每个子域都链接到一个具有相同名称的子目录,例如domain.com转到/ public_html /,sub.domain.com转到/ public_html / sub /托管强制执行此操作。
  • 我无法创建符号链接。
  • 我的空间和数据库有限,这意味着我不能为每个项目进行新的安装。 (因此域访问模块)
  • 我的域名注册商(Godaddy)与共享主机不搭配。我尝试使用它们托管DNS并对我的托管服务器执行通配符A记录,但它不起作用,并且Godaddy由于某种原因不允许使用通配符CNAME记录...

对我而言,似乎唯一的选择是.htaccess魔法 我需要一个.htaccess文件放入subdomain director(y / ies)来告诉apache:

  1. 数据位于根网站目录
  2. 要不更改任何其他内容,以便Drupal模块知道请求了哪个子域,并且用户仍然在浏览器窗口中看到“sub.domain.com”。
  3. 感谢您的帮助!

    TL; DR
    如何告诉Apache使用来自另一个目录的数据(即/ public_html /而不是/ public_html / subdomain /)而不进行重定向或对标题进行任何更改? HTTP_HOST需要完好无损 谢谢!

3 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

试试这个

RewriteEngine On
RewriteCond %{HTTP_HOST} !^example\.com$ [NC]
RewriteRule ^(.*)$ http://example.com%{REQUEST_URI} [R=301,L]

答案 2 :(得分:0)

试试这个。

RewriteEngine On
RewriteCond %{HTTP_HOST} sub\.example\.com$ [NC]
RewriteRule ^sub/(.*)$ $1 [L]

不确定它是否可行,因为我不知道您的主机如何配置服务器以将子域映射到其他文件夹。

否则你可以尝试代理标志,但这不会在php中设置正确的http_host变量。

你确定Drupal没有不同的方法来进行多次安装。我知道WP确实可以选择为所有表名使用前缀,这样多个安装可以使用相同的数据库共存,只要它们使用不同的前缀即可。不确定Drupal安装的大小,以及主机提供的磁盘空间量。