Назад | Перейти на главную страницу

Mod ReWrite Catch-All Subdomain

В основном я хочу *.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...

Вы, конечно, можете настроить способ работы сопоставления. См. Документацию для получения всех подробностей и дополнительных примеров.