PDA

Pogčedajte punu verziju : Moj CMS i URL slug


ljtruba
11. 12. 2009., 22:40
Poydrav,
imam veliku bazu vesti sa preko 600 članaka na sajtu www.hi-files.com/vesti

Želim da konačno napravim SEO friendly linkove, a kasnije i neki lepi kalendar za vesti.

Pročitao sam članak na linku
http://phptips.org/index.php/create-search-engine-friendly-urls-with-php-and-mod_rewrite/
i uz pomoć njega napravio neku skriptu koju možete videti na
http://www.hi-files.com/vesti2.php

U htacces fajlu stoji sledece
RewriteEngine on
RewriteRule ^/?([a-z]+)$ $1.php [L]
RewriteRule ^vesti/([0-9]+)$ /vesti.php?page=$1 [L]
RewriteRule ^vesti2/([0-9]+)$ /vesti2.php?page=$1 [L]
RewriteRule ^vesti2/([a-zA-Z0-9\-]+)/?$ vesti2.php?articleurlslug=$1 [L]

Imam nekoliko problema.
1. ne radi mi link http://www.hi-files.com/vesti2
2. da li postoji automatski nacin kreiranja slug-a, jer trenutno imam u bazi dodatno polje pa 600 puta treba da unesem neki slug
3. sta se desava sa nasim slovima

znam da je problem kompleksan, ali pomagajte, zaista želim da napravim ovo kako treba

MorenoArdohain
11. 12. 2009., 23:19
Mogu da ti pomognem samo oko ovog linka za vesti2.. Ne nalazi http://www.hi-files.com/vesti2 zato sto nemas regexp koji hvata to.. Regexpi koje si stavio hvataju samo vesti2 sa slashom i brojem strane.

Mali dodatak: vidim i ovaj prvi rule:
RewriteRule ^/?([a-z]+)$ $1.php [L]
izmeni ga da prihvata i brojeve, trebalo bi da vesti2 pretvara u vesti2.php

Pitanje je onda da li se kolje sa drugim rules :)

japan
11. 12. 2009., 23:28
1. ovako nesto bi verovatno pomoglo:
RewriteRule ^vesti2/?$ /vesti2.php [L]

2. update tabela_vesti set slug=lcase(naslov)

3. mislim da ne bi trebalo da bude problema sa nasim slovima, ali ako bas hoces da imas ciste ASCII karaktere u url-ovima, onda bi trebalo da imas neku trazicionu tabelu u kojoj bi definisao tacno koji se karakter ubacuje umesto odredjenog naseg slova, i da to primenjujes i pri generisanju slug-a, a i pri ovom upitu iz stavke 2.

//edit: pod tranzicionom tabelom podrazumevam nesto poput ovoga $punc na linku koji si naveo, s tim da ne treba da izbacujes te karaktere, nego da ih zamenis slovima bez kukica...

ljtruba
12. 12. 2009., 10:18
Hvala obojici.

@Moreno
Kada umesto RewriteRule ^/?([a-z]+)$ $1.php [L] napisem RewriteRule ^/?([a-z][0-9]+)$ $1.php [L] onda mi drugi linkovi ne rade

@japan
Uradio sam RewriteRule ^vesti2/?$ /vesti2.php [L] i lepo radi

Sto se tice nasih slova, pogledajte trecu vest.
Slug u bazi je denon-osvežava-stereo-modele ali link ne radi

nn.nn
12. 12. 2009., 11:36
Sto se tice nasih slova, pogledajte trecu vest.
Slug u bazi je denon-osvežava-stereo-modele ali link ne radi

Ne radi jer si ograničio rule samo na ASCII znakove. Ako možeš, probaj da poslednje pravilo zameniš sa RewriteRule ^vesti2/(.)/?$ vesti2.php?articleurlslug=$1 [L]

Ili uradi nešto poput onog što ti je japanac napisao pod 3.

ljtruba
14. 12. 2009., 00:02
Premenio sam na RewriteRule ^vesti2/(.)/?$ vesti2.php?articleurlslug=$1 [L]
ali ipak ne radi.

Nemanja Avramović
14. 12. 2009., 00:47
Mislim da treba:

^vesti2/(.*)/?$ vesti2.php?articleurlslug=$1 [L]

ljtruba
15. 12. 2009., 14:49
Radi!!! Bacite pogled na www.hi-files.com/vesti

Sto se tice htaccess-a stavio sam
RewriteRule ^vesti/([0-9]+)$ /vesti.php?page=$1 [L]
RewriteRule ^vesti/?$ /vesti.php [L]
RewriteRule ^vesti/(.*)/?$ vesti.php?articleurlslug=$1 [L]

Napravio sam php fajl koji mi radi update tabele sa vestima i pravi slug tako sto uzima naslov, skida mu & / ' i umesto spejsova stavlja -. Takodje, radi i lowercase i stripslashes.

Pri unosu novih vesti, napravio sam da se slug sam kreira po istom pravilu, ali da je pri editovanju clanka moguce menjati i slug.

Uh, sad kad krene poseta sa Gugla :)

cvele
15. 12. 2009., 15:11
Najefikasniji nacin da kreiras slug je pri unosu vesti u zasebno polje u tabeli.
Dakle, napravis fju koja ce ti od naslova praviti slug i upisivati ga u bazu.

Primer (obrati paznju na encoding):

function toSlug( $title )
{
$bad = array( 'Š','Ž','š','ž','Ÿ','À','Á','Â','Ã','Ä','Å','Ç','È ','É','Ê','Ë','Ì','Í','Î','Ï','Ñ',
'Ò','Ó','Ô','Õ','Ö','Ø','Ù','Ú','Û','Ü','Ý','à','á ','â','ã','ä','å','ç','è','é','ê',
'ë','ì','í','î','ï','ñ','ò','ó','ô','õ','ö','ø','ù ','ú','û','ü','ý','ÿ',
'Þ','þ','Ð','ð','ß','Œ','œ','Æ','æ','µ',
'"',"'",'“','”',"\n","\r",'_','ć','Ć','č','Č','đ','Đ');

$good = array( 'S','Z','s','z','Y','A','A','A','A','A','A','C','E ','E','E','E','I','I','I','I','N',
'O','O','O','O','O','O','U','U','U','U','Y','a','a ','a','a','a','a','c','e','e','e',
'e','i','i','i','i','n','o','o','o','o','o','o','u ','u','u','u','y','y',
'TH','th','DH','dh','ss','OE','oe','AE','ae','u',
'','','','','','','-','c','C','c','C', 'dj', 'Dj');

$slug = str_replace( $bad, $good, $title);

$slug = trim($slug);
$bad_reg = array('/\s+/','/[^A-Za-z0-9\-]/');
$good_reg = array('-','');

return strtolower(preg_replace($bad_reg, $good_reg, $slug));
}

ljtruba
16. 12. 2009., 15:35
Hvala cvele, ali nasa slova u mom slucaju lepo rade, tako da nema potreba da ih "osakatim"

ljtruba
12. 05. 2010., 15:51
Opet ja, napravio sam sledeci rewrite

RewriteEngine On
RewriteRule ^/?([a-z]+)$ $1.html [L]
RewriteRule ^([^/]*)\.html$ /page.php?page=$1 [L]

tako da sada umesto page.php?page=kontakt imam samo kontakt

Ali sta da radim kada imam php fajlove?
Ubacio sam
RewriteRule ^/?([a-z]+)$ $1.php [L]
ali dobijam 500 error

Help!

ljtruba
12. 05. 2010., 15:58
Problem je sto mi taj konkretan fajl ima drugaciji content, on je tipa

novosti.php?page=3
novosti.php?page=2