Apache Rewrite Mod

2

Estou tentando alcançar o subdomínio virtual, pois o meu provedor de hospedagem definiu uma limitação no número de subdomínios que posso ter! Eu já tenho uma entrada de DNS curinga para que todos os subdomínios sejam aceitos e enviados para a raiz do meu domínio. Aqui está o que eu coloquei no .htaccess para lidar com o redirecionamento:

RewriteEngine on
RewriteCond %{HTTP_HOST} !^(www|admin).* [NC]
RewriteCond %{HTTP_HOST} ^([a-zA-Z0-9]+)\.domain\.-com
RewriteCond /home/username/public_html/subdomain/%1 -d
RewriteRule ^(.*) /home/username/public_html/subdomain/%1/$1

O problema está na última linha que faz o redirecionamento real, o servidor mostra um 500 (erro interno do servidor), mas o log de erros do apache não expande o erro. Em seu lugar, se eu colocar algo como:

RewriteRule ^(.*) index.php?path=/home/username/public_html/subdomain/%1/$1

Funciona bem ... E o caminho é o caminho correto do arquivo.

    
por Birla 03.12.2011 / 08:12

2 respostas

1

Embora seja tarde, mas aqui está a resposta completa para a minha pergunta. É um roteiro muito útil se você ficar sem subdomínios.

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{HTTP_HOST} !^[www|admin] [NC]
RewriteCond %{HTTP_HOST} ^([a-zA-Z0-9]+)\.domain\.com [NC]
RewriteRule (.*) /subdomain/%1/$1 [L]

Observe a URL real de: link será link

    
por 08.02.2013 / 06:00
0

Eu aconselharia:

  • primeiro teste se for um subdomínio (como você faz) e, se for o caso, faça seus testes em / subdomínio / (subdomínio real)
  • se for (www ou admin), recuse tudo o que tentar acessar / subdominio / xxx

Note que removi ( /home/username/public_html )

Então, isso deve estar perto de:

RewriteEngine on
# first handle subdomains
RewriteCond %{HTTP_HOST} !^(www|admin)\.* [NC]
RewriteCond %{HTTP_HOST} ^([a-zA-Z0-9]+)\.domain\.com
RewriteCond /home/username/public_html/subdomain/%1 -d
RewriteRule (.*) /subdomain/%1/$1
# then in main domains:
RewriteCond %{HTTP_HOST} ^(www|admin)\.* [NC]
# ...refuse access to subdomain:
RewriteRule ^/subdomain(.*) - [R=404,L]

NB: este é um redirecionamento 404, então você pode fazer seu próprio 404 no início dos rewriterules, algo como:

ErrorDocument 404 /404.php
RewriteEngine on
RewriteRule /404.php - [QSA,L]
... blabla...

E no seu 404.php, manipule o URL para exibir uma mensagem legal:)

Duas dicas:

Por favor, tente usar a diretiva RewriteLog : ajuda você a rastrear esses problemas:

# Trace:
# (!) file gets big quickly, remove in prod environments:
RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On

Minha ferramenta favorita para verificar o regexp:

link (não se esqueça de escolher ereg (POSIX) em vez de preg (PCRE)!)

    
por 03.12.2011 / 11:51