Subdomínio do mod_rewrite do Apache e argumentos de URL

2

Estou tentando escrever um mod_rewrite do Apache que possa receber informações do subdomínio e depois do domínio e passá-las como algumas variáveis para um script PHP.

Aqui está o que eu tenho até agora, com isso eu posso obter o subdomínio ou os argumentos de URL.

RewriteEngine On

RewriteCond %{HTTP_HOST} ^([^./]+)\.domain\.com/([a-zA-Z0-9/-]+)$
RewriteCond %1 !=www
RewriteRule ^ redirect.php?subdomain=%1&args=$2

RewriteRule ^/?([a-zA-Z0-9/-]+)$ redirect.php?args=$1 [L]

mod_rewrite está habilitado, e estamos usando um registro A com caractere curinga para apontar todo o tráfego para esse servidor * .domain.com

Além disso, peço desculpas se isso foi postado em outro lugar, tentei resolver isso de vez em quando no último mês e não percebi isso, ou encontrei a resposta publicada em qualquer lugar.

    
por Blake 14.12.2011 / 07:07

1 resposta

0

Como Shane Madden já mencionou, o primeiro RewriteCond não parece que vai corresponder a nada. O motivo é duplo: em primeiro lugar, o primeiro . não é ignorado e, em segundo lugar, a variável% {HTTP_HOST} não contém nenhuma barra, portanto, toda a seção após domain\.com não corresponderá a nada.

RewriteCond %{HTTP_HOST} ^([^./]+)\.domain\.com/([a-zA-Z0-9/-]+)$


Eu nunca usei% 1 no lado esquerdo de um RewriteCond antes. A menos que tenha certeza de que isso funciona, se você tiver mais problemas, tente remover essa linha para eliminá-la como uma possível causa. Também não deve haver um sinal = lá. Simplesmente !www é o que você quer aqui. Se você tiver problemas com essa linha, altere-a para usar a variável %{HTTP_HOST} em vez de% 1.

RewriteCond %1 !=www


O $2 na substituição deste RewriteRule não possui conjuntos de colchetes correspondentes no padrão, portanto, ele estará vazio. Você provavelmente desejará adicionar um padrão maior a este. Se tiver apenas um conjunto de parênteses, $ 1 será o que você deseja, mesmo que você já tenha% 1 na substituição. Eu suspeito que você também queira fazer este /redirect.php... se você estiver fazendo isso nos arquivos de configuração e não em um .htaccess.

RewriteRule ^ redirect.php?subdomain=%1&args=$2

Além disso, devo acrescentar que a correspondência simplesmente ^ está propensa a criar loops. Tenha cuidado com isso.

    
por 14.12.2011 / 09:04