Forum Sveta kompjutera

Nazad   Forum Sveta kompjutera > Internet > Web razvoj > Serverske aplikacije i baze podataka

Serverske aplikacije i baze podataka PHP, Perl, ASP, ASP .NET, ColdFusion...
MySQL, PostgreSQL, MSQL, Oracle...

Odgovor
 
Alatke vezane za temu Vrste prikaza
Stara 16.2.2022, 16:39   #1
dbaja
Veteran
 
Avatar korisnika dbaja
 
Član od: 4.12.2005.
Poruke: 1.180
Zahvalnice: 50
Zahvaljeno 214 puta na 130 poruka
Određen forumom RewriteRule problemi

Drugari, hteo bih da mi se kada neko unese adresu:
primer.com/en


to pomoću RewriteRule u .httaccessu transformiše u:
primer.com/index.php?lang=en


ali da se u Address baru i dalje vidi baš https://www.primer.com/en
a ne https://www.primer.com/index..php?lang=en kao što se desi komandom
RewriteRule ^en$ /index.php?lang=en [L]




ima li ko da može pomoći?
dbaja je offline   Odgovor sa citatom ove poruke
Stara 16.2.2022, 18:39   #2
Neutrino
Deo inventara foruma
 
Član od: 17.6.2011.
Poruke: 7.235
Zahvalnice: 93
Zahvaljeno 3.270 puta na 1.971 poruka
Određen forumom Re: RewriteRule problemi

TL;DR Znam, udavih ali ovo je često predmet konfuzije pa bih da objasnim kad sam već ovde

Prepisivanje (rewrite) URL-ova pomoću mod_rewrite modula ima dva režima rada: lokalni i eksterni. Podrazumevano se koristi lokalni ukoliko se eksplicitno ne zahteva eksterni.

Kada se koristi lokalni režim, kompletan proces "prepisivanja" URL-a se vrši na serveru i browser kao odgovor dobija traženi resurs bez ikakvih dodatnih instrukcija servera gde bi browser stvarno trebalo da potraži traženi resurs pa se tako u lokalnom režimu ne menja adresa browsera.

Primer lokalnog prepisivanja bi upravo bio tvoj kod.

Kod:
# .htaccess
RewriteEngine On
RewriteRule ^en$ /index_r.php?lang=en [L]
Fajl index_r.php ovde služi isključivo da pokaže da li se redirekcija odigrala i ako jeste da ispiše vrednost lang parametra ako postoji.
PHP kod:
<?php
// index_r.php
echo $_GET['lang'] ?? '-/-';
Ako uključiš opciju Preserve Log u Chrome Developer Tools-u videćeš da u odzivu server šalje status kod (Status Code) 200 OK što generalno znači da je server odradio svoje i da je time zahtev klijenta (browsera) uspešno opslužen.



Sa druge strane, kod eksterne redirekcije server nakon prijema zahteva browsera, detektuje i obrađuje prepisivanje URL-ova ali u odgovoru umesto traženog resursa šalje "prepisani" URL koji služi kao putokaz browseru gde da nađe resurs koji je originalno tražio. Kod eksterne redirekcije promena adrese u browseru je uvek vidljiva.

Eksterna redirekcija mora da se zahteva eksplicitno dodavanjem R Apache flaga na kraju RewriteRule direktive pri čemu se ako se ne navede HTTP kod podrazumeva 302 Found.

Kod:
# .htaccess
RewriteEngine On
RewriteRule ^en$ /index_r.php?lang=en [L,R]
Kada se pogleda DevTools u headerima odziva jasno može da se vidi 302 Found status kod i Location header koji govori browser-u gde se traženi resurs nalazi nakon čega browser automatski pravi još jedan zahtev sa navedenim URL-om i pri tome menja sadržaj adresnog polja.



Eksterna redirekcija se često koristi sa eksplicitnim navođenjem 301 Moved Permanently status koda kako bi se pretraživačima naznačilo da je stranica koja se nalazi u indeksu premeštena na drugu lokaciju i time očuvao status u indeksu.

Kod:
# .htaccess
RewriteEngine On
RewriteRule ^en$ /index_r.php?lang=en [L,R=301]


Dakle, u ovom slučaju prva opcija je sasvim ispravna i da ne bi došlo do prepisivanja potrebno je korisiti sledeći kod.
Kod:
RewriteEngine On
RewriteRule ^en$ /index.php?lang=en [L]
Međutim, stavka pobrljavka koja često ume da napravi problem prilikom razvoja je da browseri keširaju eksterne redirekcije!

To znači da ako je u bilo kom trenutku korišćena eksterna redirekcija prilikom razvoja (R flag u .htaccess) browser je zapamtio taj par i neće ni pokušavati da kontaktira server već će odmah tražiti "redirektovani" resurs.

U takvim slučajevima najpametnije je raditi razvoj sa isključenim keširanjem u DevTools konzoli (Network / Disable cache).

Poslednja ispravka: Neutrino (18.2.2022 u 0:22)
Neutrino je offline   Odgovor sa citatom ove poruke
Sledećih 4 korisnika se zahvaljuje korisniku Neutrino na korisnoj poruci:
dbaja (16.2.2022), doctor (17.2.2022), Relja (4.5.2022), Remedy (8.3.2022)
Stara 16.2.2022, 18:55   #3
dbaja
Veteran
 
Avatar korisnika dbaja
 
Član od: 4.12.2005.
Poruke: 1.180
Zahvalnice: 50
Zahvaljeno 214 puta na 130 poruka
Određen forumom Re: RewriteRule problemi

Hvala na informativnom odgovoru, ali imam problem da iako koristim baš taj metod u .htaccess fajlu:


RewriteRule ^en$ /index.php?lang=en [L]

međutim, na neki volšeban način, parametar lang=en se uopšte ne prenese, ignoriše ga.


A kada stavim RewriteRule ^en$ /index.php?lang=en [L,R=301]
onda ga uredno prenese ali jbg, dobijem URL koji sadrži to što neću da se tako vidi (...index.php?lang=en).
dbaja je offline   Odgovor sa citatom ove poruke
Stara 16.2.2022, 19:10   #4
Neutrino
Deo inventara foruma
 
Član od: 17.6.2011.
Poruke: 7.235
Zahvalnice: 93
Zahvaljeno 3.270 puta na 1.971 poruka
Određen forumom Re: RewriteRule problemi

Prepisivanje (rewrite) obuhvata samo path deo URL-a tj. sadržaj URL-a do znaka ? koji indikuje početak tzv. query stringa.

Ukoliko želiš da i query string bude obuhvaćen prepisivanjem onda moraš da navedeš QSA Apache flag.

Kod:
# .htaccess
RewriteEngine On
RewriteRule ^en$ /index.php?lang=en [L,QSA]
EDIT: Ukoliko imaš dovoljno vremena i pristup konfiguraciji servera, najsigurniji način da nađeš šta nije u redu sa mod_rewrite prepisivanjem je da loguješ ceo proces dodavanjem sledećeg reda u konfiguraciju.
Kod:
LogLevel debug rewrite:trace6

Poslednja ispravka: Neutrino (18.2.2022 u 0:24)
Neutrino je offline   Odgovor sa citatom ove poruke
Sledećih 5 korisnika se zahvaljuje korisniku Neutrino na korisnoj poruci:
Aleksandar Djurovic (17.2.2022), dbaja (17.2.2022), makiem (17.2.2022), Relja (4.5.2022), Remedy (8.3.2022)
Stara 17.2.2022, 16:36   #5
dbaja
Veteran
 
Avatar korisnika dbaja
 
Član od: 4.12.2005.
Poruke: 1.180
Zahvalnice: 50
Zahvaljeno 214 puta na 130 poruka
Određen forumom Re: RewriteRule problemi

E, da, sa QSA ide sve kako treba. Hvala!
dbaja je offline   Odgovor sa citatom ove poruke
Odgovor

Bookmarks sajtovi

Alatke vezane za temu
Vrste prikaza

Vaš status
Ne možete postavljati teme
Ne možete odgovarati na poruke
Ne možete slati priloge uz poruke
Ne možete prepravljati svoje poruke

BB kod: uključeno
Smajliji: uključeno
[IMG] kod: uključeno
HTML kod: isključeno


Slične teme
tema temu započeo forum Odgovora Poslednja poruka
Problemi, problemi JerrySRB Kvarovi 3 11.8.2015 13:10
problemi i samo problemi dokle... lemson Kvarovi 13 18.1.2013 22:31
Podesavanje .htaccess fajla Miki2 Web razvoj 1 6.11.2011 17:56
Problemi sa kompjuterom se nastavljaju youngster Kvarovi 1 10.7.2010 22:10
Problemi, problemi i samo problemi dume Slobodni softver 24 28.12.2008 15:51


Sva vremena su po Griniču +2 h. Sada je 7:51.


Powered by vBulletin® verzija 3.8.7
Copyright ©2000–2022, vBulletin Solutions, Inc.
Hosted by Beograd.com