Mod ReWrite Catch-All Subdomain

基本上我想*.domain.com拉起domain.com/*/ *.domain.com (不redirect)。

我进入了cPanel的子域部分,并为这个域设置了一个通配符。 这似乎是正确的解决,即* .domain.com正在提出domain.com。

我现在在public_html目录中创build了一个htaccess文件,其中包含:

 Options +FollowSymLinks Options +Indexes RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} !www.domain.com$ [NC] RewriteCond %{HTTP_HOST} ^(www.)?([a-z0-9-]+).domain.com [NC] RewriteRule (.*) %2/$1 [L] 

我得到的错误是'500内部服务器错误',有什么想法?

参考这个StackOverflow问题:“ 使用.htaccess随时创build子域 ”

查看问题的答案,特别是这个链接 ,其中有一些应该在你的情况下工作的例子。

Webmasterworld发布的地址有几个问题,包括子域recursion,因为.htaccess也会影响您的主www根目录中的子目录。

最终的代码是这样的:

 RewriteBase / #### URL Rewrite Handler for Subdomains (by Randall Krause) #### RewriteCond %{ENV:REDIRECT_SUBDOMAIN} ="" RewriteCond %{HTTP_HOST} ^([a-z0-9][-a-z0-9]+)\.mydomain\.org\.?(:80)?$ [NC] RewriteCond %{DOCUMENT_ROOT}/subdomains/%1 -d RewriteRule ^(.*) subdomains/%1/$1 [E=SUBDOMAIN:%1,L] RewriteRule ^ - [E=SUBDOMAIN:%{ENV:REDIRECT_SUBDOMAIN},L] 

如果你想看看你上面的代码错误(什么是创build500错误),检查你的error_log。 我的猜测是这是造成recursion。

我会使用mod_vhost_alias 。 例如:

 VirtualDocumentRoot /usr/local/apache/vhosts/%-3+ 

将请求映射如下:

  http://dom1.example.com/ => /usr/local/apache/vhosts/dom1/ http://foo.dom2.example.com/ => /usr/local/apache/vhosts/foo.dom2/ etc... 

您当然可以调整映射的工作方式。 有关所有详细信息和更多示例,请参阅文档。