Faça o XAMPP / Apache servir arquivo fora do htdocs [fechado]

304

É possível configurar o xampp para servir um arquivo fora do htdocsdiretório?

Por exemplo, digamos que eu tenha um arquivo localizado da seguinte maneira:

C:\projects\transitCalculator\trunk\TransitCalculator.php

e meus arquivos xampp são normalmente exibidos em:

C:\xampp\htdocs\

(porque essa é a configuração padrão) Existe alguma maneira de fazer o Apache reconhecer e exibir meu TransitCalculator.phparquivo sem movê-lo para baixo htdocs? De preferência, eu gostaria que o Apache servisse / tivesse acesso a todo o conteúdo do diretório de projetos e não quero mover o diretório de projetos para baixo htdocs.

edit: editado para adicionar o Apache ao título da pergunta para tornar o Q / A mais "pesquisável"

cmcculloh
fonte
1
As tags devem ser pesquisáveis ​​o suficiente, eu acho.
icedwater
24
Esta questão não deveria ter sido encerrada. Esta é uma pergunta do XAMPP. Esta é uma pergunta do desenvolvedor.
Andrew Koper
15
Andrew Koper, eu concordo, mas não é surpreendente com o nível de hostilidade pesada endêmica em toda a ecosfera de troca de pilhas neste momento. _ (ツ) _ / ¯
cmcculloh
Maby fora do tópico, mas só quero dar uma dica: Algumas vezes uma opção é mover os diretórios para a pasta "htdocs", por exemplo. se você gostaria de poder abrir arquivos no Google Drive em host local;) ( stackoverflow.com/questions/41751330/… )
Gordova
2
Além de todas as respostas, gostaria de adicionar uma. A partir do PHP 5.4.0, você pode mover para a raiz do seu projeto usando a linha de comando e executar php -S <host>:<port>. Por exemplo php -S localhost:80.
radiantshaw

Respostas:

362

Ok, de acordo com as respostas de pix0r , Sparks e Dave , parece que existem três maneiras de fazer isso:


Hosts virtuais

  1. Abra C: \ xampp \ apache \ conf \ extra \ httpd-vhosts.conf.
  2. Cancelar comentário ~ linha 19 ( NameVirtualHost *:80).
  3. Adicione seu host virtual (~ linha 36):

    <VirtualHost *:80>
        DocumentRoot C:\Projects\transitCalculator\trunk
        ServerName transitcalculator.localhost
        <Directory C:\Projects\transitCalculator\trunk>
            Order allow,deny
            Allow from all
        </Directory>
    </VirtualHost>
  4. Abra o arquivo hosts (C: \ Windows \ System32 \ drivers \ etc \ hosts).

  5. Adicionar

    127.0.0.1 transitcalculator.localhost #transitCalculator

    até o final do arquivo (antes do material Spybot - Search & Destroy, se você tiver o instalado).

  6. Salvar (talvez você precise salvá-lo na área de trabalho, altere as permissões no arquivo antigo dos hosts (clique com o botão direito do mouse em> propriedades) e copie o novo no diretório sobre o antigo (ou renomeie o antigo) se estiver usando Vista e tenha problemas).
  7. Reinicie o Apache.

Agora você pode acessar esse diretório navegando para http: //transitcalculator.localhost/ .


Faça um Alias

  1. Iniciando a ~ linha 200 do seu http.confarquivo, copie tudo entre <Directory "C:/xampp/htdocs">e </Directory>(~ linha 232) e cole-o imediatamente abaixo com C:/xampp/htdocso diretório desejado (nesse caso C:/Projects) para dar ao servidor as permissões corretas para o novo diretório.

  2. Encontre a <IfModule alias_module></IfModule>seção (~ linha 300) e adicione

    Alias /transitCalculator "C:/Projects/transitCalculator/trunk"

    (ou o que for relevante para seus desejos) abaixo do Aliasbloco de comentários, dentro das tags do módulo.


Mude a raiz do seu documento

  1. Edite ~ linha 176 em C: \ xampp \ apache \ conf \ httpd.conf; mude DocumentRoot "C:/xampp/htdocs"para #DocumentRoot "C:/Projects"(ou o que você quiser).

  2. Edite ~ linha 203 para corresponder à sua nova localização (neste caso C:/Projects).


Notas:

  • Você precisa usar barras invertidas "/" em vez de barras invertidas "\".
  • Não inclua o "/" à direita no final.
  • reinicie seu servidor .
cmcculloh
fonte
13
Na etapa (3) para editar o C: \ Windows \ System32 \ drivers \ etc \ hosts. Prática recomendada para executar o editor (bloco de notas, bloco de notas ++ ou qualquer editor) como administrador primeiro. Assim, você pode salvar diretamente na pasta C: \ Windows \ System32 \ drivers \ etc \.
CallMeLaNN
3
Se você encontrar 403 erros, consulte este link
Wojtek Owczarczyk
21
Usando Permitir pedido, negar Permitir de todos no Win7 retorna 403 ERRO, porque essas opções estão obsoletas. Use Exigir tudo concedido. stackoverflow.com/questions/9110179/…
hywak
4
Apenas FYI, este passo não pareceu ser necessário para eu fazer: Un-comentário linha 19 (NameVirtualHost *: 80)
Silverback
2
Usar Order allow,deny Allow from allnão funcionou para mim, mas Require all grantedfuncionou.
Danny Beckett
96

Você pode realocá-lo editando a configuração DocumentRoot em XAMPP \ apache \ conf \ httpd.conf.

Atualmente, deve ser:

C: / xampp / htdocs

Altere para:

C: / projects / transitCalculator / porta-malas

Dave Ward
fonte
40
Não se esqueça de editá-lo nas duas linhas que solicitam o DocumentRoot. Se você alterar apenas o primeiro, obterá erros de acesso de leitura, etc. #
Arcolye
2
isso se aplica ao XAMP mac também?
angry kiwi
agora por qual URL, pode acessar a página de índice?
precisa saber é o seguinte
49

Um VirtualHost também funcionaria para isso e pode funcionar melhor para você, pois você pode hospedar vários projetos sem a necessidade de subdiretórios. Aqui está como você faz isso:

httpd.conf (ou extra \ httpd-vhosts.conf em relação ao httpd.conf. Barras à direita "\" podem fazer com que não funcione):

NameVirtualHost *:80
# ...
<VirtualHost *:80>  
    DocumentRoot C:\projects\transitCalculator\trunk\
    ServerName transitcalculator.localhost
    <Directory C:\projects\transitCalculator\trunk\>  
        Order allow,deny  
        Allow from all  
    </Directory>
</VirtualHost> 

Arquivo HOSTS (geralmente c: \ windows \ system32 \ drivers \ etc \ hosts):

# localhost entries
127.0.0.1 localhost transitcalculator.localhost

Agora reinicie o XAMPP e você poderá acessar http: //transitcalculator.localhost/ e ele será mapeado diretamente para esse diretório.

Isso pode ser útil se você estiver tentando replicar um ambiente de produção no qual está desenvolvendo um site que ficará na raiz de um nome de domínio. Você pode, por exemplo, apontar para arquivos com caminhos absolutos que serão transferidos para o servidor:

<img src="/images/logo.png" alt="My Logo" />

enquanto em um ambiente que usa aliases ou subdiretórios, você precisa acompanhar exatamente onde o diretório "images" é relativo ao arquivo atual.

pix0r
fonte
Eu tenho várias unidades de rede no meu PC que foram mapeadas para letras de unidades (por exemplo X:\myfolder). Quando uso esse método, recebo um aviso "Proibido acesso". Isso significa que o usuário do Apache não tem acesso de leitura à unidade?
harryg
1
Em Directorysubstituir Order allow,denye Allow from allcom Require all granted. Veja stackoverflow.com/questions/9110179/…
Michiel
16

Você pode configurar o Apache para servir páginas de qualquer lugar com restrições, mas ele normalmente é distribuído de forma mais segura.

A edição dos arquivos apache (http.conf é um dos nomes mais comuns) permitirá que você defina qualquer pasta para que ela apareça na raiz da web.

EDITAR:

alias myapp c: \ myapp \

Editei minha resposta para incluir o formato para criar um alias no arquivo http.conf, que é como um atalho no Windows ou um link simbólico em un * x, onde o Apache 'finge' que uma pasta está no webroot. Isso provavelmente será mais útil para você a longo prazo.

faíscas
fonte
10

Se você está tentando fazer com que o XAMPP use uma unidade de rede como raiz do documento, use os caminhos UNC no httpd.conf. O XAMPP não reconhecerá suas unidades de rede mapeadas.

Por exemplo, o seguinte não funcionará, DocumentRoot "X: / webroot"

Mas isso acontecerá, DocumentRoot "//192.168.10.100/webroot" (observe as barras, não as barras)

Jason
fonte
Funciona bem com minha unidade de rede mapeada.
Sean Kendle 5/05
7

Solução para permitir que o Apache 2 hospede sites fora dos htdocs:

Sob a diretiva "DocumentRoot" no httpd.conf, você deve ver um bloco de diretório. Substitua este bloco de diretório por:

<Directory />
    Options FollowSymLinks
    AllowOverride All
    Allow from all
</Directory> 

LEMBRE-SE DE NÃO USAR ESTA CONFIGURAÇÃO EM UM AMBIENTE REAL

Leandro
fonte
Funciona apenas para sistemas de arquivos que suportam symlincs. Nenhuma explicação sobre por que essa opção não deve ser usada.
Danubian Sailor