|
Regular expression i htaccess regex, PCRE, POSIX, upotreba Apache .htaccess , mod_rewrite |
|
Alati teme | Način prikaza |
18. 03. 2010. | #1 |
novi član
Na probnom radu
Datum učlanjenja: 04.11.2006
Lokacija: Beograd
Poruke: 22
Hvala: 5
9 "Hvala" u 5 poruka
|
Subdomain iz $_SERVER['HTTP_HOST']
Aplikacija prikazuje sadržaj na osnovu domena na kome se servira (uključujući i poddomen). Jedni podaci se prikazuju za www.domain.com, drugi za dev.domain.com, treći za test.domain.com i tako dalje.
Pokušavam da rešim sledeći problem: automatski izvršiti redirekciju na www poddomen ukoliko korisnik dođe na domen bez ikakvog poddomena. Na praktičnom primeru: 1) korisnik je došao na example.com => izvrsiti redirekciju na www.example.com 2) korisnik je došao na test.еxample.com (ili www.example.com ili dev.example.com) => ne menjati ništa Trenutno radim preg_match nad $_SERVER['HTTP_HOST']: Kôd:
preg_match ("%^(?:([A-Za-z0-9\-_]+)\.)?([^/.]+)\.([^/:]+)(\:[0-9]+)?%i", $_SERVER['HTTP_HOST'], $data); Problem nastaje sa raznim ccTLD i second level TLD, kao sto su .co.uk ili .com.br - tada sam primoran da vršim upite u bazu što želim da izbegnem. Uzmimo za primer da korisnik dolazi na example.co.uk, a da se aplikacija servira sa www.example.co.uk. Trenutni regex ce vratiti: $data[1] = 'example'; $data[2] = 'co'; $data[3] = 'uk'; Tj dobiću da je pronađen subdomain 'example'. Potom vršim upit u bazu po domenu 'example.co.uk'. Ukoliko ne dobijem rezultat, pokušavam sa 'www.example.co.uk'. Tim upitom nalazim domen i vršim redirekciju. U slučaju da ni 'www.example.co.uk' domen nije nađen u bazi, izvrsiću redirekciju na neki treći domen, ali to je trenutno manje bitno. Ima li neko bolju ideju kako bolje razrešiti ovaj problem? Poslednja izmena od User : 18. 03. 2010. u 16:29. |
18. 03. 2010. | #2 |
profesionalac
Qualified
Datum učlanjenja: 11.01.2006
Lokacija: Niš
Poruke: 100
Hvala: 66
11 "Hvala" u 9 poruka
|
Мислим да нема потреба да се компликује оволико. Твоје потребе би могао да задовољи и обичан explode('.', $_SERVER['HTTP_HOST']);. Тиме ћеш добити све појединачне делове домена. Затим можеш да провераваш предзадњи део. Уколико је он нешто из опсега (co, its, in...), знаш да се ради о .ccTLD па сходно томе вршиш даље провере.
Ако ово није довољно поуздано, онда можеш да идеш обрнутом логиком - провераваш да ли се ради о интернационалном домену (com, net, org, info, eu, asia...). Ако јесте, третираш га на један начин, ако није - на други. Верујем да се све ово можеш решити уз неколико if-ова. |
18. 03. 2010. | #3 |
Dejan Katašić
Wrote a book
Datum učlanjenja: 10.06.2005
Lokacija: Novi Sad
Poruke: 1.017
Hvala: 129
86 "Hvala" u 43 poruka
|
To radi na nivou .htaccess, ne u PHP. Recimo ovako (brzi primer, hvala Google...
Kôd:
Options +FollowSymlinks RewriteEngine on rewritecond %{http_host} ^domain.com [nc] rewriterule ^(.*)$ http://www.domain.com/$1 [r=301,nc] Poslednja izmena od noviKorisnik : 18. 03. 2010. u 17:22. |
18. 03. 2010. | #4 |
novi član
Na probnom radu
Datum učlanjenja: 04.11.2006
Lokacija: Beograd
Poruke: 22
Hvala: 5
9 "Hvala" u 5 poruka
|
To nije resenje. Evo vise primera:
www.domain.com ne menjati primer.domain.com ne menjati drugi.domain.com ne menjati domain.com se menja u www.domain.com www.domain232.com.br ne menjati primer.domain32423.com.br ne menjati example2323.com.br se menja u www.example2323.com.br Nije mi bilo u planu da za svaki domen koji se kreira pravim novu liniju u .htaccess fajlu. Ja ne znam na kom ce (pod)domenu korisnici pokretati applikaciju. Oni najcesce imaju *.domain.com => domain.com alias. Aplikacija se servira sa jednog (ili vise) njihovih poddomena (ne domena bez poddomena) - to je obicno www.domain123.com ali moze da bude bilosta.domain123.com (kao i bilo koji drugi TLD). |
18. 03. 2010. | #5 |
član
Certified
|
Imao sam slican problem (sa jedinom razlikom da su mi trebali domainovi kod kojih se znalo da je SDL veci od 3). Problem je resen na sledeci nacin:
explode-ujes po "." onda proveravam po broju clanova u dobijenom nizu ukoliko je 2 to je domain formata example.com ukoliko je 3 onda se proverava srednji clan, pa ako je on manji ili jednak 3 onda je to formata example.co.uk npr a ako nije onda je to formata nesto.example.com a sve ostalo je formata nesto.example.co.uk (ne znam koji su detalji, ali ovo je meni resavalo sve sto mi je trebalo za tu situaciju) |
18. 03. 2010. | #6 |
član
Certified
|
Ako je .htaccess u igri probaj nesto ovako
Kôd:
RewriteCond %{HTTP_HOST} !^(.*)\.([^\.]+)\.com$ [NC] RewriteCond %{HTTP_HOST} ([^\.]+).com$ [NC] RewriteRule ^(.*)$ http://www.%1.com/$1 [L,R=301] UPDATE: ja koristim ovo za neke sajtove gde imam po 300+ domainova koji teraju isti kod |
18. 03. 2010. | #7 |
Bojan Abramovic
Professional
Datum učlanjenja: 17.01.2008
Lokacija: Novi Sad
Poruke: 232
Hvala: 30
47 "Hvala" u 30 poruka
|
Ako sam dobro skapirao radi se o aplikaciji koja "tera" vise domena.
U tom slucaju bih generisao (array) listu domena pri svakoj promeni u bazi, dalje bi se prema tome radila provera i redirekcija. |
18. 03. 2010. | #8 |
Bojan Abramovic
Professional
Datum učlanjenja: 17.01.2008
Lokacija: Novi Sad
Poruke: 232
Hvala: 30
47 "Hvala" u 30 poruka
|
mikro vreme odvojih...
Mislim da bi ovako nesto radilo dovoljno brzo cak i na vecem broju domena. PHP kôd:
|
18. 03. 2010. | #9 |
Goran Pilipović
Sir Write-a-Lot
|
Biće bar 2000+ domena i broj raste vremenom ... već sada ih ima oko 300 a još nismo ni počeli.
__________________
Goran Pilipović a.k.a. Ugly Fingers Bradley f.k.a. bluesman I don't always know what I'm talking about but I know I'm right! |
18. 03. 2010. | #10 |
Bojan Abramovic
Professional
Datum učlanjenja: 17.01.2008
Lokacija: Novi Sad
Poruke: 232
Hvala: 30
47 "Hvala" u 30 poruka
|
Na 50.000 domena u array-u vreme prolaska kroz petlju je na mom racunaru 0.035 sec.
A verujem da sigurno moze jos da se optimizuje. Poslednja izmena od bOkIcA : 18. 03. 2010. u 20:54. |
|
|
Slične teme | ||||
Tema | Početna poruka teme | Forum | Odgovori | Poslednja poruka |
$_SERVER['REMOTE_ADDR'] prazan ? | Ivan | PHP | 22 | 16. 03. 2010. 20:23 |
Koristiti $_SERVER['REQUEST_TIME'] vs time()? | bluesman | PHP | 29 | 08. 11. 2009. 00:40 |
Ajax & cross-subdomain problemi | bNasty | (X)HTML, JavaScript, DHTML, XML, CSS | 9 | 17. 01. 2007. 02:15 |
Prazan $_SERVER['HTTP_REFERER'] | bluesman | PHP | 26 | 11. 11. 2005. 14:43 |
Virtuelni subdomain preko .htaccess | bluesman | Regular expression i htaccess | 6 | 17. 06. 2005. 12:05 |