Para quem desenvolve para web mas acha um saco ter de fazer FTP do aplicativo sendo desenvolvido para testar online a cada alteração segue algumas dicas para desenvolvimento offline.
Neste caso esta dica é para uso com Apache e PHP em ambiente Windows.
Mas antes de continuar o intuito é evitar configurações no .htaccess para uso local e depois para uso online. Pois desta forma seus subsites sempre serão acionados como se fossem o único no servidor através do nome virtual.
Se você tem instalado o XAMPPS ou WAMPPS ou até mesmo o AMPPS que é o que eu uso, provavelmente você tem nas pastas WWW, PUBLIC ou HTDOCS lotadas de pastas para cada site ou scripts e muitas vezes precisa alterar hTACCESS para ser acionado por subdiretórios de seu servidor local, exemplo:
http://localhost/site1
http://localhost/site2/public
http://localhost/site3/web
Você até gostaria de melhorar estes acessos, portanto que tal chama-los assim:
http://site1.local
http://site2.local
http://site3.local
Muito mais profissional e simples. Lógico que site1, site2 ou site3 fica pouco explicito mas você poderá usar o nome que quiser:
http://vendashop.local
http://armazem.local
http://hotel.local
Bacana, mas vamos as alterações para que isto possa acontecer.
O Primeiro Passo será necessário alterar um arquivo do Windows, o hosts. Abra o arquivo c:\windows\system32\drivers\etc\hosts. Acrescente os nomes de sites na lista:
# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
127.0.0.1 http://site1.local
127.0.0.1 http://site2.local
127.0.0.1 http://site3.local
Veja que 127.0.0.1 é o IP de acesso local, ou seja este é o endereço da própria máquina em que se está usando o servidor e ele não é visivel numa rede pois cada máquina sobe o seu próprio 127.0.0.1.
Após a alteração salve o arquivo e reinicie o Apache. Ao digitar os endereço acima eles acessarão os sites no seu servidor de forma mais homogênea.
O Segundo Passo é alterar o arquivo httpd-vhosts.conf. Abra o arquivo c:\???\apache\conf\extra\httpd-vhosts.conf e para cada site inclua o trecho abaixo modificando somente o SITEROOT
define SITEROOT "site1"
define PUBLICROOT "/"
<VirtualHost 127.0.0.1:80>
ServerName ${SITEROOT}.local
ServerAlias www.${SITEROOT}.local
ServerAdmin admin@${SITEROOT}.local
Alias /doc "C:/AMPPS/www/${SITEROOT}/documentacao"
DocumentRoot "C:/AMPPS/www/${SITEROOT}/site${PUBLICROOT}"
<Directory "C:/AMPPS/www/${SITEROOT}/site${PUBLICROOT}">
Require all granted
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog "${APACHE_LOG_DIR}/${SITEROOT}.err"
CustomLog "${APACHE_LOG_DIR}/${SITEROOT}.log" combined
</VirtualHost>
<VirtualHost 127.0.0.1:443>
ServerName ${SITEROOT}.local
Alias /doc "C:/AMPPS/www/${SITEROOT}/documentacao"
DocumentRoot "C:/AMPPS/www/${SITEROOT}/site${PUBLICROOT}"
<Directory "C:/AMPPS/www/${SITEROOT}/site${PUBLICROOT}">
Require all granted
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog "${APACHE_LOG_DIR}/${SITEROOT}.err"
CustomLog "${APACHE_LOG_DIR}/${SITEROOT}.log" combined
SSLEngine on
#SSLCertificateFile "C:/AMPPS/apache/conf/ssl_crt/server.crt"
#SSLCertificateKeyFile "C:/AMPPS/apache/conf/ssl_crt/server.key"
SSLCertificateFile "${APACHE_SSL_DIR}/localhost.crt"
SSLCertificateKeyFile "${APACHE_SSL_DIR}/localhost.key"
</VirtualHost>
Veja que define SITEROOT "site1" entende que tenho uma pasta na pasta root de execução com o nome site1, mas você pode colocar qualquer nome, exemplo: define SITEROOT "vendashop", define SITEROOT "armazem" ou define SITEROOT "hotel"
No meu caso, como estou usando AMPPS e ele usa a pasta root WWW todos os meus sites estão dentro dela e possuem uma hierarquia com duas pastas onde site contém o script e documentação contém os arquivos de instruções.
Exemplo:
Ao configurar a pasta c:/AMPPS/WWW/site1 para ser chamada via http://site1.local defino:
define SITEROOT "site1"
define PUBLICROOT "/"
Ao configurar a pasta c:/AMPPS/WWW/site2/public para ser chamada via http://site2.local defino:
define SITEROOT "site2"
define PUBLICROOT "/public/"
Ao configurar a pasta c:/AMPPS/WWW//site3/web para ser chamada via http://site3.local defino:
define SITEROOT "site3"
define PUBLICROOT "/web/"
Para cada site que quero configurar basta modificar as duas variaveis, SITEROOT e PUBLICROOT e copiar/colar o grupo <VirtualHost>...</VirtualHost>
Estas variáveis podem ser colocadas no inicio do arquivo c:\???\apache\conf\extra\httpd-vhosts.conf e devem apontar para as pastas correspondentes no seu servidor. No caso do AMPPS fica assim:
define APACHE_LOG_DIR "C:/AMPPS/apache/logs"
define APACHE_SSL_DIR "C:/AMPPS/apache/bin/ssl"
O legal desta configuração é que tanto HTTP quanto HTTPS ficam configurados sendo possivel acessar http://site1.local ou https://site1.local.
Supondo que tenha um novo script e quero acrescentá-lo ao meu hall de aplicações, chamarei de rochinha, então devo proceder da seguinte forma:
Criarei dentro da pasta WWW, PUBLIC ou HTDOCS a pasta rochinha e dentro dela a pasta site onde colocarei toda a raiz do script.
...
c:\ampps\www\rochinha
|
+------------site
|
+------------documentacao
...
Então devo configurar as variáveis principais assim:
define SITEROOT "rochinha"
define PUBLICROOT "/"
E colar o grupo <VirtualHost>...</VirtualHost>.
Feito isto, devo reiniciar o Apache e acessar o script via http://rochinha.local ou https://rochinha.local
Hoje rodo meus scripts usando Apache 2.4.41(Win32), OpenSSL/1.0.2s e PHP 7.4.24.
Bom trabalho.