基本上我想要*.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...
当然,您可以定制映射的工作方式。请参阅文档以了解所有详细信息和更多示例。