Mod ReWrite Catch-All 子域名

Mod ReWrite Catch-All 子域名

基本上我想要*.domain.com拉起domain.com/*/(而不是重定向)。

我进入了 cPanel 的子域名部分,并为该域名设置了通配符。它似乎解析正确,即 *.domain.com 调出了 domain.com。

我现在在 public_html 目录中创建了一个 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 内部服务器错误’,有什么想法吗?

答案1

请参阅此 StackOverflow 问题:“使用 .htaccess 动态创建子域名

查看问题的答案,具体来说此链接其中有适合您情况的示例。

Webmasterworld 帖子解决了几个问题,包括子域名递归,因为 .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] 

如果您想查看上述代码的错误原因(是什么导致了 500 错误),请检查您的 error_log。我猜是它导致了递归。

答案2

我会用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...

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

相关内容