Vhost-uri ceva mai inteligente pe Apache - wildcard subdomains

Dacă dezvoltați local site-uri pentru mai mulți clienți, folositi Apache și vreți câte un subdomeniu local pentru fiecare proiect în parte, puteți face una din următoarele lucruri:

  1. Pentru fiecare proiect în parte adăugați câte un VirtualHost;
  • Automatizați toată povestea, astfel încât fiecare folder din htdocs să fie considerat un subdomeniu.

În httpd.conf adăugați:

<VirtualHost *:80>
    VirtualDocumentRoot C:/work/projects/client1/%1/
    ServerAlias  *.client1.localhost
</VirtualHost>

<VirtualHost *:80>
    VirtualDocumentRoot C:/work/projects/client2/%1/
    ServerAlias  *.client2.localhost
</VirtualHost>

<VirtualHost *:80>
    VirtualDocumentRoot C:/work/projects/%1/
    ServerAlias  *.localhost
</VirtualHost>

Este important ca regula globală (generală? universală? nu știu care ar fi un termen bun) să fie ultima.

Cam atât :slight_smile:

5 Likes

Ceva de genul ăsta făceam și eu, doar că eu foloseam Acrylic DNS pentru a-mi mapa automat orice-domeniu.local către un dosar cu același nume din W: (care la rândul său era de fapt webroot-ul Apache montat cu comanda subst). :slight_smile:

2 Likes

Ăsta e “best practice”.
Tot timpul sa folosesti VirtualHost.

http://localhost/nume_proiect

E motiv sa-ti iei o rigla peste degete. imho

Ideea era că folosim virtual host-uri dinamice, fără a fi nevoie să modifici etc/hosts de fiecare dată când ai nevoie de unul nou.

1 Like

Eu foloseam un alias (si cateva functii) camd rulam XAMPP

function newvhost(){
    domain=$1
    name=${domain/.app/}
    touch 'c:\xampp\apache\conf\vhosts\'$domain.conf
    cat > 'c:\xampp\apache\conf\vhosts\'$domain.conf <<EOF
    <VirtualHost *:80>
        ServerAdmin [email protected]
        DocumentRoot "C:/dev/$name/public"
        ServerName $name.app
        ServerAlias www.$name.app
        ErrorLog "logs/$name.app.example.com-error.log"
        CustomLog "logs/$name.app.example.com-access.log" common
        
        # SetEnv DB_HOST localhost
        # SetEnv DB_DATABASE $name
        # SetEnv DB_USERNAME root
        # SetEnv DB_PASSWORD 
        # SetEnv DB_PREFIX prefix_
    </VirtualHost>
EOF
    subl 'c:\xampp\apache\conf\vhosts\'$domain.conf
    addToHosts $domain
    # c:/xampp/apache_stop.bat
    # c:/xampp/apache_start.bat
}
alias nv="newvhost"

function addToHosts()
{
    echo '127.0.0.1 '$1 >> 'c:/Windows/System32/drivers/etc/hosts'
}

Si il foloseam nv site.app

1 Like