Apache, SERVER_NAME substituído por HTTP_HOST

1

Estou usando o Apache / 2.4.10 (Win32) e tenho uma dúvida sobre a relação entre SERVER_NAME e HTTP_HOST .

Eu notei um estranho (pelo menos eu acho) comportamento do apache, dentro do meu httpd.conf eu tenho:

ServerName example.com:80

Agora, como eu testei via PHP servidor variáveis que são tomadas a partir do apache. / p>

Do php (o link acima):

If the script is running on a virtual host, this will be the value defined for that virtual host.

Não estou usando nenhum host virtual.

SERVER_NAME substituído por HTTP_HOST , por exemplo, se eu acessar o website via m.example.com , o SERVER_NAME será substituído pelo HTTP_HOST e ambos serão iguais ao mesmo valor, agora, apesar de ter foi testado eu queria saber:

  • O apache usa qualquer host virtual sem que eu saiba, aqui está meu arquivo httpd.conf ?
  • É PHP ou comportamento do apache?
  • Isso é feito automaticamente (o override) por PHP ou Apache (neste momento eu não sei quem é culpado)?

Editar:

  • A substituição é feita pelo apache, testei usando .htaccess file, o resultado é que mesmo antes das variáveis entregues em PHP a substituição é feita.

Então a substituição é feita pelo apache, a única questão que permanece são quais são as condições para tal substituição e mais importante existe uma maneira de obter ou uma variável que forneça o valor ServerName de o httpd.conf ?

    
por Aviel Fedida 23.09.2014 / 16:40

1 resposta

2

Se você deseja rastrear possíveis nomes virtuais e / ou reescreve, alguns lugares para checar: 1) ports.conf ('NameVirtualHost' é definido lá); 2) arquivo .htaccess.

Mas, acho que a resposta mais correta à sua pergunta é a relação. ServerName é o nome padrão que o servidor apache está chamando. Esse nome não requer necessariamente um registro DNS correspondente, pois uma entrada local / etc / hosts impedirá que o Apache reclame.

HTTP_HOST, por outro lado, é o nome do qual o cliente (navegador) conhece o servidor como, que para ser acessível, deve ter uma entrada DNS correspondente (ou uma entrada de host correspondente no cliente) para ser capaz de resolver e ser acessível.

Nesse contexto, HTTP_HOST sempre aparecerá nos logs de solicitação do Apache porque o cliente não conhece nenhum outro nome para o servidor que não seja o HTTP_HOST solicitado.

ACOMPANHAMENTO: O uso de FINDSTR é: findstr "string_to_find" path_to_file

Abaixo está um exemplo de arquivo batch (script) que usa FINDSTR para encontrar a linha que diz "ServerName" no httpd.conf. Este script em lote também analisa a linha que encontra e ecoa (isto é, imprime na tela) apenas o valor da variável ServerName, não a linha inteira.
@echo off for /f "tokens=2* delims==" %%i in ('FINDSTR "ServerName" httpd.conf') do ( echo %%i )

Você pode editar a palavra 'httpd.conf' e especificar o caminho completo, conforme necessário.

    
por 23.09.2014 / 17:17