Pergunta

I wan't que as pessoas sejam capazes de registrar suas próprias seções dentro do meu site e ter essas seções ser seu próprio subdomínio do meu site. para que alguém possa registar 'teste' e ter 'test.example.com' se referem ao seu site, que seria, digamos /site.php?id=1 Assim como eu iria sobre como escrever uma regra mod_rewrite para isso?

Foi útil?

Solução

mod_rewrite pode não ser a melhor ferramenta para isso. RewriteRules são grandes para mapear um arquivo para outra coisa, mas não foi realmente significou para correspondência de domínio.

O melhor que você pode fazer usando mod_rewrite é o seguinte:

RewriteEngine On
# Skip www.domain.com
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} ^([^.]+)\.domain\.com
RewriteRule ^/(.*)$  site.php?domain=%1&file=$1 [L]

O que não é realmente útil. O que eu recomendaria a fazer em vez disso, se verificar programaticamente o valor de HTTP_HOST como tal:

function get_subdomain() {
  if(preg_match('/^([^.]+)\.domain\.com/i', $_SERVER['HTTP_HOST'], $matches)) 
    return $matches[1];
}

Outras dicas

Você pode configurar o apache para reivindicar os domínios "especiais" na configuração do Apache (por exemplo www.mydomain.com, etc), em seus recipientes de hosts virtuais e ter a outros padrão para o seu primeiro host virtual. Você pode, então, reescrever o url base para um pedido de expedição que inspeciona o URL e envia o usuário fora de sua área correta.

De docs Apache 2.0:

Quase qualquer directiva Apache pode ir em um recipiente VirtualHost. o primeira secção VirtualHost é usado para pedidos sem um nome de servidor conhecido.

Coloque o código para lidar com * .meudominio.com no primeiro host virtual:

<VirtualHost *:80>
  Servername custom.mydomain.com
  DocumentRoot /var/www/html/custom
  RewriteEngine on
  RewriteRule ^/$ /var/www/cgi-bin/dispatch.cgi [R]
  # more configs here
</VirtualHost>

<VirtualHost *:80>
  Servername www.mydomain.com
  DocumentRoot /var/www/html/homepage
  # more configs here
</VirtualHost>

Em dispatch.cgi, inspecionar a url chamando para determinar onde o usuário deve ir. Certifique-se de configurar o DNS para aceitar todos os subdomínios.

Espero que ajude!

Na verdade, temos vindo a utilizar esta técnica sem muito problema para o ano passado. Nossos configuração olhares mod_rewrite como:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !www.mydomain.com
RewriteCond %{HTTP_HOST} ^([^.]+)\.mydomain\.com
RewriteCond %{REQUEST_URI} !admin
RewriteRule (.*) /admin/ [R=301,L]
RewriteRule ^admin(.*)$ hosted/admin/$1 [QSA,L]

O que acontece, é que os usuários são direcionados para theiraccount.mydomain.com/admin.

Em seguida, usamos PHP para identificar a parte da conta do nome de domínio. Usando algo como US $ _SERVER [ 'SERVER_NAME'] ou algum método de obter o nome de domínio e analisá-lo funciona muito bem.

Mantenha estas configurações no httpd.conf, porém, isso vai se tornar um problema cpu em locais de maior tráfego se for mantido como .htaccess.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top