Tko je dobar sa .htaccess i RewriteRule

Već se 5 dana patim s ovim, cijenim svaku pomoć.

Imam linkove tipa domena.hr/?d=ime

Ma sve mi super i lijepo radi, osim facebooka, kada podijelim neki link, bilo like ili send, izgubi mi se $_GET, ovako:

original: http://domena.hr/neka/stranica/?d=ime
na nečijem zidu: http://domena.hr/neka/stranica/?fb_ref=i_ostala_s*anja

Htio bih rewrite napraviti na način da ?d=ime zamijenim sa dist-ime/
Nadam se da će onda facebook morati zapamtiti cijeli link (taj dio mi je dosta bitan jer se radi o nekoj vrsti referrala)

prije: http://domena.hr/neka/stranica/?d=ime
poslije: http://domena.hr/neka/stranica/dist-ime/

Heh, zvuči tako jednostavno :smiley:

samo da spomenem, stranica je u wordpressu, a ovo mi je trenutni .taccess

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# RewriteRule ^(.*)/dist-([^/]*)/$ /$1/?d=$2 [L]
</IfModule>
# END WordPress

Ovaj zadnji (komentirani) RewriteRule je bio pokušaj, ali mi nije uspjelo, ne znam zašto…

Nitko mi neće pomoći ? :frowning:

Ma šalim se :slight_smile: ako netko naleti na ovu poruku, evo update:

Ovo je prvi pokušaj:

RewriteRule ^(.*)/dist-([^/]*)/$ /$1/?d=$2 [L]

To nije valjalo, pa se trenutno borim sa ovim:

RewriteRule ^(.*)/dist_([a-zA-Z][^/]*)/?$ $1/\?d=$2 [L]

Rezultat:

Stalno dobivam 404 (odnosno, ne dobivam, jer sljedeće rewrite pravilo 404 vodi na index.php, a to je stranica koja prikazuje najnovije postove).

Gdje je pogreška ? :sherlock:

Malo je cudno to sto pokusavas napravit. Je li mozes jos malo objasnit problem, sto tocno zelis napravit? Sto Facebook tocno napravi? Problem koji opisujes, to da ti Facebook kida GET parametre jos nisam primjetio.

Ajde neka mi se netko javio! :slight_smile:

A kida mi, ili zbog samog facebooka, ili mi je plugin koji koristim neispravan.
Ne znam točno.

Htio sam samo promijeniti:
domena.hr/?d=ime
u:
domena.hr/dist_ime/

Šta ja znam, činilo mi se da bi ljepše izgledalo…

Buduci sve redirectas na index.php, onda na index-u pokupi tu vrjednost koja ti treba iz URL-a. Dakle linkaj na stranicu sa:

domena.hr/dist_ime/

Onda u index.php stavis:

  	$url = explode('/', $_SERVER['REQUEST_URI']);
	array_shift($url);

        if(substr($url[0], 0, 5) == dist_) //ako je u URL-u dist_
        {
                 $ime = substr($url[0], 5, strlen($url[0])-5)
                 include '/?d=' . $ime;
        }

Za .htaccess nisam 100% siguran, al probaj ovo (ako ti ne pase gornje rjesenje):

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)/dist_(.*)/$ /$1/?d=$2 [L]
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

moram samo pogledati što je ova naredba ‘include’, moment…

nisam još vidio da se ovako koristi

Probaj se malo igrati sa .htaccess.
Evo ti ovdje objasnjenje regularnih izraza i RewriteRule naredbe:
Apache mod_rewrite

Include ti mozda i ne treba, ako ti je potrebna samo vrijednost koja se nalazi iza dist_, ali za svaki slucaj pogledaj ovdje

A jeste likovi, pa nisam od jučer - odmah sam napisao da se danima već mučim s time - a to bi značilo da sam prvo sve dobro proguglao.

Na php.net-u sam svakodnevno, i zbog drugih stvari - samo nisam još vidio (pa čak ni tamo) da netko koristi include na gornji način.

Hvala igore na linku za mod rewrite, imam ih još par (neki su puno puno opširniji) u bookmarku - ovoga još nisam vidio.

Nadao sam se da ću ovdje možda pronaći nekoga tko jede regexe za doručak, da mi pomogne, a ne da mi gurne par linkova koje i sam mogu pronaći.

Mislim da sam neću tako brzo riješiti taj problem, glava mi je prepuna kombinacija, moram par dana raditi nešto drugo prije nego se vratim na ovo, možda pogledam na forum.modrewrite.com da li mi netko može pomoći…

Hvala svejedno što ste se javili!

Gle, pitanje ti je dosta cudno, ocito da se ljudi nisu susreli s tim dosad. Pricekaj malo da se javi netko vjestiji. Ali nakon toliko guglanja ovo vec baca na sizifovanje. :slight_smile:

Pa i je sizifovanje, nema smisla da mi niti pokusava pomoci netko tko je temu samo malo načeo - sigurno sam sam više vremena i truda uložio da to savladam, a opet, nisam dorastao.

Baš mi treba neki mačak.

Problem je s fejsbukom što, čak i kada netko ručno c/p link na svoj zid, neki put postoji taj ?d=ime, a neki puta ne, kako koji dan i kako koji put refrešaš, a to mi nije nikako dobro, o tome mi ovisi cijeli projekt.

Ili ću se snaći, ili neću, mislim da neću (i ne mogu) trenutno razbijati glavu s time…

E moj amigo, necemo na zelenu granu s takvim razmisljanjem.

Imas URL
domena.hr/nesto/neka_stranica/dist_nesto
(dakle,dio dist_nesto mora biti zadnji dio URL-a)

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} (.*)

RewriteRule (.*)dist_([a-zA-Z][^/]*) %3/$1?d=$2 [L]
RewriteRule . /index.php [L]

</IfModule>
# END WordPress

To je odgovor na pitanje kako iz linka domena.hr/nesto/dist_ime/ redirectat na domena.hr/nesto/?d=ime.

Svaka čast!
Koliko vidim, radi se samo o ovoj liniji ?

RewriteRule (.*)dist_([a-zA-Z][^/]*) %3/$1?d=$2 [L]

Da li mi se samo čini ili na prvom dijelu fali ^ na početku i $ na kraju ? :slight_smile:

ok, to nije neka frka, ali ovaj drugi dio mi nije jasan, ako može još malo info:

što je %3/
?

%3 jest zapravo naziv domene (npr. domena.hr)
Primjeti da sam dodao
RewriteCond %{HTTP_HOST} (.*)
HTTP_HOST je serverska varijabla, i ona sadrzi naziv domene. Treca je po redu i pristupas jos s indeksom 3 (primjeti da iznad imas jos 2 iste naredbe).

^ i $ nisu potrebni jer nije striktno odredjeno kako ce string pattern (uzorak koji trazih) pocinjati i zavrsavati, bitno je samo da se pronadje taj dio dist_. Samo pripazi da unutar URL-a ne bude jos koji dio naziva dist_nesto (npr. domena.hr/stranica/dist_nesto/dist_ime), jer ce onda bit problema.

ok

zato sam i stavio dist_ jer je ostatak (mislim na to kako wordpres radi linkove) sve sa -

imaš pravo, nisam vidio gornju liniju.

samo još jedna stvar, ako je to treća varijabla, onda bi umjesto %3 trebalo ići $3 ili ?
da li je to tipfeler ili stvarno treba ići % (ako da, onda molim da mi kažeš zašto) ?

Odlicno onda.
% je nekakva referenca na RewriteCond direktivu, a $ na RewriteRule direktivu, odnosno na promjenjivi dio njihova uzorka.
Ako ti se da, procitaj malo ovdje, sve je objasnjeno:
mod_rewrite