В основном я хочу *.domain.com
подтянуться domain.com/*/
(не перенаправлять).
Я зашел в раздел поддоменов cPanel и установил подстановочный знак для этого домена. Кажется, он разрешается правильно, т.е. * .domain.com вызывает domain.com.
Теперь я создал файл htaccess в каталоге public_html, содержащий:
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 Internal Server Error». Есть идеи?
Обратитесь к этому вопросу 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. Я предполагаю, что это вызывает рекурсию.
я хотел бы использовать 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...
Вы, конечно, можете настроить способ работы сопоставления. См. Документацию для получения всех подробностей и дополнительных примеров.