【问题标题】:Apache - Rewrite the subdomain to a location?Apache - 将子域重写到某个位置?
【发布时间】:2011-11-09 01:22:23
【问题描述】:

很抱歉,我已经尝试了几个小时来完成这项工作,但我没有取得任何进展......

我希望这样,如果我网站上的用户键入 user.site.com,他们将被带到 site.com/user,但 URL 仍将显示 user.site.com。我怎样才能做到这一点?使用.htaccess?服务器文件?

【问题讨论】:

    标签: php apache redirect subdomain


    【解决方案1】:

    差不多了,肯

    RewriteEngine On
    
    RewriteCond %{HTTP_HOST} !www.site.com$ [NC]
    RewriteCond %{HTTP_HOST} ^([a-z0-9-_]+).site.com [NC]
    RewriteRule (.*) %1/$1 [QSA,L]
    

    %1 = .site.com 之前的内容

    $1 = 你在 / 之后得到的东西

    如果你有 test.site.com/foo.php ,你就会有 /test/foo.php。 如果你只是想测试,那就别管 1 美元了。

    QSA = 查询字符串追加, L = 最后一个。

    您应该阅读@phihag 帖子中关于 mod_rewrite 的网址。

    【讨论】:

      【解决方案2】:

      使用mod_rewrite:

      RewriteEngine On
      RewriteBase /
      RewriteCond %{HTTP_HOST} !www.site.com$ [NC]
      RewriteCond %{HTTP_HOST} ^([a-z0-9-_]+).site.com [NC]
      RewriteRule (.*) %1/$1 [QSA,L]
      

      如果您想链接到资源,请使用完整 (http://site.com/user/static/x.css) 或相对 (static/x.css) URL。当此规则生效时,绝对 URL (/user/static/x.css) 需要以不同的方式制作。

      【讨论】:

      • @Ken ,racar 哎呀,它应该是 %1 而不是 %2。固定。
      • 好吧,现在500错误消失了,但是找不到页面:S
      【解决方案3】:

      要在地址栏中保留原始地址,您需要反向代理而不是重定向。重定向告诉浏览器使用不同的地址向服务器发送第二个请求,反向代理告诉服务器找到另一个页面并在不通知浏览器的情况下发送它(我相信这是你想要的)。反向代理是通过 mod_rewite 中的 [P] 标志实现的

      确保 mod_rewritemod_proxymod_proxy_http 已加载并放置指令

      <Proxy *>
          Order deny,allow
          Allow from all
      </Proxy>
      
      RewriteEngine on
      
      RewriteRule ^/(.*) http://site.com/user/$1 [PL]
      

      如果您没有 root 权限,请进入 user.site.com 或 .htaccess 的虚拟主机配置。这会将子域中的所有页面代理到主域文件夹。如果您只想代理索引页面,请改用RewriteRule ^/ http://site.com/user

      我假设您使用的是 http 而不是 https。如果是这样,它会变得有点复杂......

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-28
        • 1970-01-01
        • 2010-10-31
        • 1970-01-01
        • 1970-01-01
        • 2012-10-21
        • 1970-01-01
        • 2014-03-04
        相关资源
        最近更新 更多