DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   Regular expression i htaccess (http://www.devprotalk.com/forumdisplay.php?f=41)
-   -   Subdomain iz $_SERVER['HTTP_HOST'] (http://www.devprotalk.com/showthread.php?t=8573)

miks 19. 03. 2010. 19:11

1 Prilog(a)
Citat:

Originalno napisao bOkIcA (Napišite 81968)
^ onda tu TLD listu da drzite u multidimenzijalnom array-u, lol opet ja i array :D ;)

Aj kad dodjete do nekog resenja da ga objavite ovde, ako ne bude problem.

Resenje vec postoji. Na linku koji sam prethodno postovao mozete naci vise informacija. Poslednja verzija za PHP je prikacena.

dejanr 26. 03. 2010. 13:28

Ja sam uspeo da odradim ovo na nivou web server-a jedan virtual host sa rewrite-om na osnovu toga da li postoji fajl u document_root/domains/imedomena

Posto je vec receno da u bazi drzite imena domena za koje ce raditi aplikacija, prilikom dodavanja, brisanja domena potrebno je i dodati i obrisati fajl u domains/ime_domena.

Tipa ako zelimo da nam aplikacija radi za example.com, samo cu touch-ovati taj fajl:

Kôd:

touch domains/example.com
touch domains/www.example.com
touch domains/test.example.com

Tako da ako posetimo http://example.com, mozemo uraditi sledeci rewrite:

Kôd:

set $postoji 0;
       
# ako fajl postoji vrati ga odmah i prekini konekciju
if (-f $request_filename) {
  break;
}
       
# ukoliko postoji trazeni domen
if (-f $document_root/domains/$host) {
  set $postoji 1;
}
       
# ukoliko postoji trazeni domen sa www pod domenom
if (-f $document_root/domains/www.$host) {
  set $postoji "${postoji}2";
}
       
# ukoliko ne postoji domen redirektuj na default host
if ($postoji = 0){
  rewrite ^(.+)$ http://www.example.com$1 last;
break;
}
       
# rewrite-uj trazeni domen sa www pod domenom
if ($postoji = 12){
  rewrite ^(.+)$ http://www.$host$1 last;
  break;
}

Koristim nginx i php fast cgi i evo kako bi to moglo da se resi:

A sve to zajedno za catchall virtual host bi izgledalo ovako:

Kôd:

server {
  listen 80 default;
  server_name    _;
  root  /Users/dejanr/Sites/dpt;
  server_name_in_redirect  off;     
  set $postoji 0;
       
  # ako fajl postoji vrati ga odmah i prekini konekciju
  if (-f $request_filename) {
    break;
  }
       
  # ukoliko postoji trazeni domen
  if (-f $document_root/domains/$host) {
    set $postoji 1;
  }
       
  # ukoliko postoji trazeni domen sa www pod domenom
  if (-f $document_root/domains/www.$host) {
    set $postoji "${postoji}2";
  }
       
  # ukoliko ne postoji domen setuj default host
  if ($postoji = 0){
    rewrite ^(.+)$ http://www.example.com$1 last;
    break;
  }
       
  # rewrite-uj trazeni domen sa www pod domenom
  if ($postoji = 12){
    rewrite ^(.+)$ http://www.$host$1 last;
    break;
  }
       
  location ~ .php$ {
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root/public$fastcgi_script_name;
    include /usr/local/nginx/conf/fastcgi_params;
  }
}


bluesman 26. 03. 2010. 13:35

Tnx, ali kod nas svi domeni pucaju na isti docroot. Mada nekako mi je nesigurno da se jedna stvar oslanja na drugu nezavisnu stvar računajući da će sve da bude kako je "logično".

dejanr 26. 03. 2010. 13:39

pa da radi sve za isti document root

dejanr 26. 03. 2010. 14:27

Document Root je u:

Kôd:

root  /Users/dejanr/Sites/dpt;
btw ovo moze i da radi kao reverse proxy ka apache-u koji je na drugom ip-u ili port-u. Pri cemu ce sve staticke stvari servirati nginx iz ovog uslova:

Kôd:

# ako fajl postoji vrati ga odmah i prekini konekciju
  if (-f $request_filename) {
    break;
  }

A ostalo biti prosledjeno apache-u koji je zver :)


Vreme je GMT +2. Trenutno vreme je 11:28.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.