【问题标题】:Folder to subdomain文件夹到子域
【发布时间】:2012-05-14 04:37:00
【问题描述】:

我的服务器提供商停止给我在控制面板中创建子域的可能方法,他们说我应该用 htaccess 解决它。

所以我必须做这样的事情。当用户键入http://asdf.example.com 时,它应该得到http://example.com/asdf 的内容(因为提供者甚至改变了 FTP 的结构......它们怎么样)

我没有找到任何教程。提前致谢。

【问题讨论】:

标签: .htaccess subdomain


【解决方案1】:

TerryE 答案的更通用版本。不过我还没有测试过!!!

RewriteCond %{HTTP_HOST} !www.example.com
RewriteCond %{HTTP_HOST} (.*).example.com
RewriteCond %1/$0        !^([^/]+)/\1
RewriteRule ^.*          %1/$0   [L]

【讨论】:

  • 我认为这不会起作用,因为在第一次通过时 fred.ex... cond1 会将 cond2 的 %1 设置为 fred,但 cond2 的正则表达式会失败,所以即使cond 成功(因为 ! 运算符),不会为重写规则设置 %1。 但是,我们应该能够拆分规则规则模式^([^/|+/)?(.*) 并设置 $1 和 $2 然后使用 RewriteCond $1%1 !^(.*?)/\1 作为不相等检查,然后重复 cond2 以重置 %1。仍然+1,因为它是个好主意。回到我的希腊岛度假胜地!
  • 有一个小错字; | 应该是 ]
  • @TerryE 我以前也这么认为,但据我所知!还将禁用该条件的反向引用,%1 仍将包含子域。我在自己的服务器上测试了上面的代码,它似乎工作正常。
  • Hummnn,刚刚重新检查了文档“这些是 %N (1 RewriteCond。”所以你是对的。匹配失败,但由于 ! 运算符而使条件成功,并且 %1 是从前一个条件传递过来的。如果专家感到惊讶,那么我很同情新手:LoL:
【解决方案2】:

您可以使用 mod_rewrite 和 mod_proxy 做到这一点:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^asdf\.example\.com$
RewriteRule ^ http://example.com/asdf%{REQUEST_URI} [L,P]

【讨论】:

    【解决方案3】:

    您不需要 mod 代理。只需进行内部重定向:

    RewriteEngine on
    RewriteBase   /
    RewriteCond   %{HTTP_HOST} =asdf.example.com
    RewriteCond   $0           !^asdf/
    RewriteRule   ^.*          asdf/$0             [L]
    

    规则重写请求前缀为asdf/,但前提是 (1) 主机是 http:/asdf... 并且 (2) 重写尚未发生。您需要 (2) 来防止迭代循环。 $0 是规则中的匹配字符串。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多