Recent, m-am izbit de problema subdomeniilor pe localhost, atât pe Windows cât și pe Ubuntu. Nemai intrând în contact cu așa ceva căutarea s-a dovedit a fi una laborioasă, dar rezultatul a fost foarte bun, mai ales dându-mi seama de avantajele utilizării subdomeniilor.
Aș vrea să vă explic problema inițială: a trebuit să lucrez la un proiect care avea niște setări mai interesante prin .htaccess. Setările aveau legătură cu modulul Apache mod_rewrite, în fișier RewriteEngine fiind On. Opțiunea aceasta, împreună desigur cu altele trebuia să rescrie linkurile mai dificile în ceva user-friendly. Desigur, simpla creare a unui folder în care am „trântit” toate fișierele nu a fost cea mai inteligentă idee, toate path-urile sistemului începând să fie date peste cap. Atunci mi-a venit ideea de subdomeniu. Acolo lucrurile sunt simple folderul principal devenind home folder pentru toate fisierele și folderele child. Problema a început pe Ubuntu, dar după ce am aflat soluția am zis să continui și pe Windows oferindu-mi un grad mult mai mare de ordonare și control.
Subdomeniile în Windows
- Primul lucru pe care trebuie să-l facem, deși nu e obligatoriu fiindcă îl putem face oricând, chiar și la final, e să modificăm fișierul hosts aflat în C:\Windows\System32\Drivers\etc și să adăugăm următoarea linie:
127.0.0.1 subdomeniu.localhost.com
Linia de mai sus redirecționează domeniul la DNS-ul local, 127.0.0.1 - Deschidem acum fișierul httpd.conf din apache(2). Dacă avem WAMPP sau XAMPP trebuie doar să găsim fișierul ascuns pe undeva prin interfață. Vom decomenta următoarea linie:
# Include conf/extra/httpd_vhosts.conf
Cu linia de mai sus am activat hostul virtual. - În funcție de ce platformă folosiți(WAMPP, XAMPP, sau apache pur și simplu) va trebui să activați două module apache, alias_module și vhost_alias_module.
- Acuma trebuie să edităm http-vhost.conf(Apache/conf/extra/http-vhost.conf) unde va trebui inserăm codul de mai jos:
ServerName localhost.com
ServerAlias www.localhost.com
DocumentRoot "D:\wamp\www"
ErrorLog "logs\errors.log"
Options Indexes FollowSymLinks
AllowOverride all
Order Deny,Allow
Deny from all
Allow from all
#setam parent domain
ServerName localhost.com
ServerAlias *.localhost.com
#unde se afla subdomeniile - folderul subdomains l-am creat pentru a pune acolo toate subdomeniile
VirtualDocumentRoot "D:\wamp\www\subdomains\%1"
ErrorLog "logs\errors.log"
Options Indexes FollowSymLinks
AllowOverride all
Order Deny,Allow
Deny from all
Allow from all
Pentru orice alt domeniu va trebui numai să creezi alt folder și să adaugi hosts(C:\Windows\System32\Drivers\etc) noul domeniu precum am făcut la primul pas.
Subdomeniile în Ubuntu
Cei cu Ubuntu, au putin mai mult de munca, dar pentru pasionați e destul de fain. Înainte de toate trebuie să vă spun că am creat toate opțiunile pentru un folder public_html care l-am creat în folderul meu home. Nu voi intra în detalii, căci acest lucru ar necesita probabil încă un articol, dar vă pot spune că atunci când lucrăm pe Ubuntu e bine să nu lucrăm în root. Am putea trece peste bariera permisiunilor fără prea multe dificultăți, dar de ce să facem asta când putea scăpa de o mulțime de probleme prin simpla creare a unui folder public_html în ~home/username/.
În acest articol voi merge totuși pe path-ul /var/www, dar vă sugerez să încercați a face ce v-am spus mai sus…ori desigur ceva mai bun, dar atunci să-mi spuneți și mie.
- Creăm un nou folder public_html
sudo mkdir -p /var/www/public_html
- Următorul pas constă în alegerea subdomeniului și crearea unui folder care să conțină alte 4 foldere necesare. Putem face asta destul de simplu cu
sudo mkdir -p /var/www/public_html/domain1.com/{public,private,log,cgi_bin}
Vedeti ca sus nu exista spații libere între acolade. - Salvăm în folderul domain1.com un dummy index.html în folderul public
- Acum folosim
cat /etc/apache2/ports.conf
Trebuie să existe aici setată opțiunea NameVirtualHost *:80 - Next…
sudo nano /etc/apache2/sites_available/domain1.com
si adaugam
ServerAdmin webmaster@domain1.com
ServerName domain1.com
ServerAlias www.domain1.comDirectoryIndex index.html
DocumentRoot /var/www/public_html/domain1.com/public
ErrorLog /var/www/vhosts/domain1.com/log/error.log
CustomLog /var/www/vhosts/domain1.com/log/access.log combined
- Acum va trebui să activăm site-ul
sudo a2ensite domain1.com
- Restartăm apache:
sudo service apache2 restart
- Deschidem ca și pe Windows fișierul hosts
sudo nano /etc/hosts
127.0.1.1 domain1.com
Acum, dacă ceva nu funcționează așa cum ar fi așteptat nu ezitați să comentați ca să rezolvăm once and forever this problem.
pai si de ce D: si nu C: ?