Apache: Tilda u web adresi
Nedavno je na listi sistemci postavljeno pitanje kako, umjesto klasičnog načina zapisivanja korisničkih stranica pomoću tilde http://www.ustanova.hr/~korisnik/, doći do adrese oblika http://korisnik.ustanova.hr/.
Jedan od odgovora uključivao je RewriteRules i potakao me da pokušam ponuditi jedno od mogućih rješenja problema.
Za početak, potrebno je u DNS-u postaviti DNS wildcard za poddomenu *.ustanova.hr:
*.ustanova.hr. IN CNAME imeposluzitelja
Zatim slijedi preinaka u datoteci httpd.conf:
<VirtualHost 192.168.1.1:80>
ServerName korisnici.ustanova.hr
ServerAlias *.ustanova.hr
DocumentRoot /var/www/korisnici/
UseCanonicalName Off
RewriteEngine on
RewriteLogLevel 1
RewriteLog /var/log/apache/rewrite.log
RewriteCond %{HTTP_host} ^([a-z0-9][-a-z0-9]+)\.ustanova\.hr\.?(:80)?$ [NC]
RewriteCond /home/%1/public_html -d
RewriteRule ^(.*) /home/%1/public_html/$1 [L]
</VirtualHost>
Malo o konfiguraciji liniju po liniju.
Pretpostavka je da u DNS-u imamo zapis korisnici, na adresi 192.168.1.1, koji na poslužitelju gleda u direktorij /var/www/korisnici. Ovdje je to urađeno samo zbog primjera uz pretpostavku da je www.ustanova.hr izdvojen kao zasebni virtualni poslužitelj.
ServerAlias direktiva postavlja alternativno ime poslužitelja na wildcard vrijednost, a direktiva „UseCanonicalName Off“ kaže poslužitelju da za ime koristi ono što mu klijent pošalje (u našem slučaju korisnik.ustanova.hr).
Slijede minimalne postavke za RewriteEngine. RewriteLogLevel može imati vrijednost od 0 do 9, pri čemu je 0-isključeno, a 9 zapisuje svaku akciju. Iako je viša vrijednost dobra za debugiranje i kontrolu rada, u radu se, zbog procesorskog i diskovnog opterećenja, ne preporuča vrijednost veća od 1.
Nakon toga slijede RewriteCond – pravila koja moraju biti zadovoljena kako bi uslijedio RewriteRule. Ovdje se provjerava da li je klijent poslao HTTP_HOST oblika nesto.ustanova.hr te da li u tom slučaju postoji direktorij /home/nesto/public_html. Možda je ovdje dobro napomenuti kako smo se ovako ograničili na klijente koji podržavaju HTTP1/1.
Ukoliko su RewriteCond zadovoljeni, izvršava se RewriteRule koji radi internu redirekciju adrese korisnik.ustanova.hr na direktorij /home/korisnik/public_html. Naravno, ukoliko su korisnički direktoriji negdje drugdje (npr. /home/studenti/korisnik/public_html), potrebno je prilagoditi odgovarajuću putanju do njih.
Ono što bi svakako valjalo napomenuti je da bi, u slučaju implementacije ovakvog ili sličnog rješenja, trebalo paziti na zagađenje imeničkog prostora ustanove. U tom smislu bi možda trebalo razmisliti o uporabi adresa oblika korisnik.nesto.ustanova.hr (npr. pero.web.ustanova.hr ili pero.korisnici.ustanova.hr).
- Inačica za ispis
- Logirajte se za dodavanje komentara
- PDF version
Komentari
pitanje
sto se desava kad pozovem adresu:
http://mate.ustanova.hr/
a na serveru ne postoji korisnik mate?
oce se prikazat naslovna stranica ustanove ili greska?
pozdrav
Ako ne postoji korisnik
Prikazat ce se DocumentRoot.
Upravo zato se i testira da li postoji direktorij /home/mate/public_html. Ukoliko ne postoji, ne izvršava se RewriteRule.
Ukoliko je DocumentRoot ujedno i root direktorij weba ustanove (/var/www), tada će se prikazati naslovnica ustanove. U ovom primjeru je postavljen kao zasebni virtualni poslužitelj. Ukoliko želimo postaviti konfiguraciju u isti virtualni poslužitelj s webom ustanove tada bi, primjerice, mogli pisati:
U ovom slučaju bi se, ako ne postoji korisnik mate, prikazao web ustanove.