【问题标题】:Virtual subdomain with wildcard mapping .htaccess具有通配符映射的虚拟子域 .htaccess
【发布时间】:2012-02-14 18:13:37
【问题描述】:

我正在建立一个下载站点,用户将能够注册并在我的服务器上创建一个包含他们用户名的文件夹,例如:home/users/username

我想要完成的是,如果有人在他们的浏览器中输入:username.domain.com,它会将他们路由到:home/users/username/,如果他们输入:username.domain.com/file.mp3,它会将他们路由到:home/users/username/file.mp3

如果可以完成子文件夹路由,那也很好,例如; home/users/username/sub/file.mp3

谢谢大家

【问题讨论】:

    标签: .htaccess virtual


    【解决方案1】:

    尝试将以下内容添加到站点根目录中的.htaccess 文件中。

    这会将对username.domain.com 的任何请求重写为正确的文件夹/子文件夹和文件。

    我假设home 是您网站根文件夹中的一个目录。

    RewriteEngine on
    RewriteBase / 
    
    #if request for usename.domain.com/anything
    RewriteCond %{HTTP_HOST} ^([^.]+)\.domain\.com$ [NC] 
    #send any request that is not already for home/users to home/users/username/anything
    RewriteRule ^(?!home/users/) home/users/%1%{REQUEST_URI} [L,NC] 
    

    【讨论】:

    • 我有一个问题,每当我输入:test.domain.com/folder 没有尾部斜杠时,它会在 url 中显示文件夹的真实路径:test.domain.com/home /用户/测试
    • @user1209681 尝试在RewriteEngine On 之前添加DirectorySlash Off,但请参阅注意事项stackoverflow.com/questions/3258879/…
    • 完美运行@Ulrich Palha,谢谢。还有一个问题,有没有其他方法可以在不使用 .htaccess 的情况下做到这一点?最初,在高流量的情况下,哪种方式效果最好、性能最好。
    • @user1209681 您也可以在您的虚拟主机中执行此操作(如果您可以访问它)。语法略有不同,性能差异更好,但可能难以察觉
    【解决方案2】:

    我尝试了 Ulrich Palha 推荐的方法,但没有运气。我希望这能在 Ulrich 的答案不起作用的情况下帮助像我这样的人。

    # Rewrite username.domain.com/<path> to domain.com/home/username/<path>
    #
    # Rewrite only if not already rewritten to /home/
    RewriteCond $1 !home/
    # Skip rewrite if subdomain is www
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    # Extract (required) subdomain to %1
    RewriteCond %{HTTP_HOST} ^([^.]+)\.domain\.com$
    # Rewrite to /home/username/URL-path
    RewriteRule (.*) /home/%1/$1 [L]
    

    【讨论】:

      猜你喜欢
      • 2017-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-19
      • 1970-01-01
      • 2011-08-16
      相关资源
      最近更新 更多