将子域指向“目录”

时间:2014-01-09 19:27:33

标签: apache .htaccess

我有两个关于将子域指向目录的问题:

  1. 目前我运行本地,但我可以在我设置的假域(带有hosts文件)上运行我的网站,它名为mysite.com。我怎么能(通过服务器设置?)这样做所有子域名将指向/?示例anders.mysite.com也应该显示mysite.com和asdassdd.mysite.com。

  2. 也许1.没有必要,但我如何通过htaccess将anders.mysite.com指向mysite.com/anders?重要提示是不应重定向。

  3. 为什么我想到1.是因为我不想在htaccess或任何apache / domain设置中指定任何地方,子域是什么,因为这将是动态的(由我的webapplication中的登录用户创建)

    目前,用户可以使用mysite.com/anders/这是他们创建的URI,而不是真正的目录。在Kohana bootstrap中,我抓取URI并显示相关的用户页面。

    我正在使用Kohana MVC框架并在我的htaccess中使用它:

    # Turn on URL rewriting
    RewriteEngine On
    
    # Installation directory
    RewriteBase /
    
    
    # Protect hidden files from being viewed
    <Files .*>
    Order Deny,Allow
    Deny From All
    </Files>
    
    
    # Protect application and system files from being viewed
    RewriteRule ^(?:application|modules|system)\b.* index.php/$0 [L]
    # Allow any files or directories that exist to be displayed directly
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    
    # Rewrite all other URLs to index.php/URL
    RewriteRule .* index.php/$0 [PT]
    

    任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:0)

  

how do i by htaccess point anders.mysite.com to mysite.com/anders ? Important notice is that should not redirect.

您可以使用此规则:

RewriteCond %{HTTP_HOST}:%{REQUEST_URI} ^([^.]+)\.[^:]+:(?!/\1/).*$
RewriteRule ^ /%1%{REQUEST_URI} [L]

答案 1 :(得分:0)

对于1,在您的虚拟主机中只需添加ServerAlias

ServerAlias *.mysite.com

然后任何子域(包括www)将指向同一文档根目录。

如果您想将子域放在他们自己的目录中(并且因为您可以访问服务器配置),您可以使用mod_vhost_aliasVirtualDocumentRoot指令:

VirtualDocumentRoot /path/to/your/htdocs/%1

因此,如果您请求blah.mysite.com,则最终会以/path/to/your/htdocs/blah作为文档根目录。

如果您需要URI中不存在的目录的目录名称,以便Kohana可以路由它们,您需要确保已加载mod_proxy:

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^([^.]+)\.
RewriteCond %{REQUEST_URI} !^/%1/
RewriteRule ^(.*)$ /%1/$1 [L,P]

使用正确的URI将请求代理回Kohana。