Pergunta

Estou tentando escrever cerca de 5 sites em um servidor Apache, que está em um endereço IP.

Por exemplo:

  • /var/www/site1
  • /var/www/site2
  • /var/www/site3
  • /var/www/site4
  • /var/www/site5

No entanto, se eu criar um link no site 2 apenas usando, por exemplo. /index.php, você esperaria que ele olhasse em /var/www/site2/index.php ... mas na verdade resolve /var/www/index.php.

Existe alguma maneira de configurar o Apache para saber que as pastas do site separadas precisam se comportar e resolver para as pastas separadas?

Este é o meu arquivo disponível no momento. Uma configuração bastante padrão, acredito:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www
    <Directory />
            Options FollowSymLinks
            AllowOverride None
    </Directory>
    <Directory /var/www/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride all
            Order allow,deny
            allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
            AllowOverride None
            Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
            Order allow,deny
            Allow from all
    </Directory>

    ErrorLog /var/log/apache2/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog /var/log/apache2/access.log combined

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>

Qualquer ajuda seria apreciada.

Obrigado gentilmente.

Andrew Barlow

Foi útil?

Solução

Você precisa de uma diretiva de nome do servidor dentro do <VirtualHost>. Ele dirá ao servidor qual host virtual está atualmente em uso, dependendo da solicitação do navegador (se o seu acesso ao seu cliente http://site1.example.com ou http://site2.example.com, eles se conectarão ao mesmo IP, daí o servidor, mas a solicitação contém o URL da solicitação original). Você terá que duplicar o seu <VirtualHost> Bloco para ter um site por hospedeiro. Cada bloco será diferente pelo nome do servidor e principalmente do documentroot. Você pode usar "Apache2CTL -s" para ver como o Apache entendeu suas configurações de host virtual.

Você pode usar um único arquivo com esse tipo de conteúdo:

<VirtualHost *:80>
  ServerName site1.myserver.com
  DocumentRoot /var/www/site1
  ...
</VirtualHost>

<VirtualHost *:80>
  ServerName site2.myserver.com
  DocumentRoot /var/www/site2
  ...
</VirtualHost>

<VirtualHost *:80>
  ServerName site3.myserver.com
  DocumentRoot /var/www/site3
  ...
</VirtualHost>

<VirtualHost *:80>
  ServerName site4.myserver.com
  DocumentRoot /var/www/site4
  ...
</VirtualHost>

<VirtualHost *:80>
  ServerName site5.myserver.com
  DocumentRoot /var/www/site5
  ...
</VirtualHost>

Obviamente, talvez com certeza que o DNS para todo esse nome acaba no seu IP. Ele não precisa ser subdomínios, desde que eles aterrissem no IP do servidor e você tenha um nome de servidor correspondente para ele. Se você precisar de nomes extras para um único site, poderá adicioná -los com "Serveralias SecondName.myserver.com ThirdName.myserver.com" abaixo o nome do servidorname

Outras dicas

@A resposta de Zeograd é provavelmente a resposta correta para a maioria das soluções, no entanto, eu tive um problema semelhante e tudo o que precisava fazer era permitir o módulo de reescrita com o a2enmod comando.

Isso é o que eu corri pela linha de comando em Ubuntu:

sudo a2enmod rewrite
sudo service apache2 restart

Se sudo service apache2 restart Não funciona, você pode tentar:

sudo /etc/init.d/apache2 restart
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top