mod_rewrite issues

Discuţii despre serverele web pe care poate rula PHP: Apache, Internet Information Server (IIS), nginx, lighttpd.

Discuţii despre cloud computing: Amazon Web Services, Azure, Google App Engine, Cloudflare

Moderator: Moderatori

KingA
PHPRomania Supporter
Mesaje: 5
Membru din: Sâm Noi 27, 2010 12:19 am

mod_rewrite issues

Mesajde KingA » Sâm Noi 27, 2010 12:55 am

Salut,

Sunt nou pe forumul acesta, l-am descoperit din cartea "AJAX and PHP - Building Responsive Web Apps" care m-a surprins in mod placut sa vad o carte scrisa de romani despre web development (poate gasesc si ceva in romana despre AJAX cu PHP).

Asa deci, am avut serverul de apache pe windows (inca-l mai am, dar nu prea mai stau pe windows), acu folosesc Linux (ubuntu 10.04) si (ca si in windows) am problem cu mod_rewrite. Pur si simplu nu ma pricep la RegEx' >.<.

Am activat modul rewrite (symlink in mods-enabled de la mods-available/rewrite.load), stiu ca mai era o metoda mai simpla dar am uitat-o, am tinut minte in schimb ca is symlinkuri.

Am in /blogger .htaccess care contine (se va subintelege "/" ca fiind root-ul serverului de web):

Cod: Selectaţi tot

RewriteEngine On
RewriteBase /
RewriteRule ^p/([0-9]+)/$ index.php?postID=$1 [R]


Ce vreau eu e ca un link /blogger/p6 sa ma redirecteze spre /blogger/index.php?postID=6.

Nu am cunostinte de regexp mai deloc, tot ce-am scris in htaccess e dupa un tutorial :P.



Avatar utilizator
Birkoff
Senior Member
Mesaje: 6380
Membru din: Joi Mar 18, 2004 2:34 pm
Localitate: Bucuresti
Contact:

Mesajde Birkoff » Sâm Noi 27, 2010 1:35 am

bine ai venit :P

iote niste tutoriale la problema ta

aici ai ce inseamna fiecare caracter din regex si exemple de folosire

aici ai despre mod-rewrite

aici ai despre htaccess si mod-rewrite

daca tot nu te descurci mai intrebi si vedem cum te putem ajuta
1) CMS, ERP, CRM, etc... (doar pentru clienti))
2) Portofoliu, servicii, contact, blog
3) Folositi aceasta clasa sql in proiectele voastre (open source)
4) Vrei un magazin virtual la cheie, usor de folosit, cu api-uri incluse pentru maximizarea vanzarilor si multe alte facilitati? Da un semn si discutam.

KingA
PHPRomania Supporter
Mesaje: 5
Membru din: Sâm Noi 27, 2010 12:19 am

Mesajde KingA » Sâm Noi 27, 2010 12:26 pm

Am

Cod: Selectaţi tot

Options +FollowSymLinks
RewriteEngine On

RewriteBase /
RewriteRule ^p{1}([0-9]+)$ index.php?postID=$1 [R]


Si tot nu merge.

Avatar utilizator
Birkoff
Senior Member
Mesaje: 6380
Membru din: Joi Mar 18, 2004 2:34 pm
Localitate: Bucuresti
Contact:

Mesajde Birkoff » Sâm Noi 27, 2010 8:04 pm

am facut teste pe local si am scos rewrite base ca nu lucram in root...
la mine asa cum e mai jos merge perfect


RewriteRule ^p{1}([0-9]+)$ http://localhost/lucru/teste/index.php?postID=$1 [R]

am scris in link http://localhost/lucru/teste/p6 si ma redirectat automat catre http://localhost/lucru/teste/index.php?postID=6

la tine probabil e problema ca nu e calea buna deci mai testeaza...
1) CMS, ERP, CRM, etc... (doar pentru clienti))
2) Portofoliu, servicii, contact, blog
3) Folositi aceasta clasa sql in proiectele voastre (open source)
4) Vrei un magazin virtual la cheie, usor de folosit, cu api-uri incluse pentru maximizarea vanzarilor si multe alte facilitati? Da un semn si discutam.

KingA
PHPRomania Supporter
Mesaje: 5
Membru din: Sâm Noi 27, 2010 12:19 am

Mesajde KingA » Dum Noi 28, 2010 10:54 pm

Nop, nu-mi merge. imi da 404 Not Found, si am scos RewriteBase

Avatar utilizator
Birkoff
Senior Member
Mesaje: 6380
Membru din: Joi Mar 18, 2004 2:34 pm
Localitate: Bucuresti
Contact:

Mesajde Birkoff » Lun Noi 29, 2010 12:57 am

eu am facut teste intre timp si cu cale relativa si merge ok

uite link demo http://birkoff.homedns.org/lucru/teste/p6

si in htacces am asa

Cod: Selectaţi tot

order allow,deny
allow from all

Options +FollowSymLinks
RewriteEngine On
RewriteBase /lucru/teste/
# din /p6 in index.php?postID=6
RewriteRule ^p{1}([0-9]+)$ index.php?postID=$1 [NC,L]


iar in index.php din pagina aia am asa

<?php

echo '<pre>'.var_export($_GET, true).'</pre>';

?>
1) CMS, ERP, CRM, etc... (doar pentru clienti))
2) Portofoliu, servicii, contact, blog
3) Folositi aceasta clasa sql in proiectele voastre (open source)
4) Vrei un magazin virtual la cheie, usor de folosit, cu api-uri incluse pentru maximizarea vanzarilor si multe alte facilitati? Da un semn si discutam.

KingA
PHPRomania Supporter
Mesaje: 5
Membru din: Sâm Noi 27, 2010 12:19 am

Mesajde KingA » Lun Noi 29, 2010 11:40 am

am:

Cod: Selectaţi tot

Options +FollowSymLinks
RewriteEngine On
RewriteBase /blogger/
RewriteRule ^p{1}([0-9]+)$ index.php?postID=$1 [NC,L]


si e la fel.

Nu pot sa postez linkuri ca nu ma lasa

Avatar utilizator
Birkoff
Senior Member
Mesaje: 6380
Membru din: Joi Mar 18, 2004 2:34 pm
Localitate: Bucuresti
Contact:

Mesajde Birkoff » Lun Noi 29, 2010 12:12 pm

da un semn pe mess sa vb ca sa vad exact unde e buba...
1) CMS, ERP, CRM, etc... (doar pentru clienti))
2) Portofoliu, servicii, contact, blog
3) Folositi aceasta clasa sql in proiectele voastre (open source)
4) Vrei un magazin virtual la cheie, usor de folosit, cu api-uri incluse pentru maximizarea vanzarilor si multe alte facilitati? Da un semn si discutam.

greatelf
PHPRomania Supporter
Mesaje: 5
Membru din: Sâm Dec 04, 2010 11:04 pm

Mesajde greatelf » Vin Dec 17, 2010 12:00 pm

Salut,
Si eu am aceasta problema si m-am gandit sa scriu aici, sa nu mai incep un topic nou. "Basically" am asa:

Doresc site.ro/article/categorie/182/
sa redirectioneze spre:
site.ro/index.php?mod=article&cat=categorie&article=182

Si am acest cod în .htaccess:

Cod: Selectaţi tot

Options +FollowSymLinks
RewriteEngine On
RewriteRule ^([a-z0-9_]+)/([a-z0-9_]+)/([a-z0-9_]+)$ index.php?mod=$1&cat=$2&article=$3 [NC,L]

Dar nu merge :( M-am uitat peste acele tutoriale, de fapt de acolo m-am inspirat pentru acest cod. Va multumesc anticipat pentru orice sfat.

Avatar utilizator
Birkoff
Senior Member
Mesaje: 6380
Membru din: Joi Mar 18, 2004 2:34 pm
Localitate: Bucuresti
Contact:

Mesajde Birkoff » Vin Dec 17, 2010 12:13 pm

la el problema era de la setarile de pe server, a trebuit sa vorbeasca cu hostul si nu stiu daca l-au rezolvat...

la tine pe local merge? daca merge pe local trebuie sa iti mearga si pe server, altfel e posibil sa fie aceeasi problema ca la el si sa fi nevoit sa vb cu hostul sa te rezolve
1) CMS, ERP, CRM, etc... (doar pentru clienti))
2) Portofoliu, servicii, contact, blog
3) Folositi aceasta clasa sql in proiectele voastre (open source)
4) Vrei un magazin virtual la cheie, usor de folosit, cu api-uri incluse pentru maximizarea vanzarilor si multe alte facilitati? Da un semn si discutam.

greatelf
PHPRomania Supporter
Mesaje: 5
Membru din: Sâm Dec 04, 2010 11:04 pm

Mesajde greatelf » Sâm Dec 18, 2010 6:52 pm

Nu merge nici pe local. Setarile serverului sunt corecte, am instalat mediawiki si acolo functioneaza codul din .htaccess pe care l-am gasit intr-un FAQ.
Problema e mai complexa si mai frustranta. Dracia de website script are optiune "friendly u.r.l." care schimba adresa paginilor intr-una simpla, dar linkurile dau eroare 404 - not found. Optiunea din admin panel adauga desigur in .htaccess codul:

Cod: Selectaţi tot

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -s
RewriteRule ^.*$ - [L]
RewriteRule ^(.*)$ index.php [L]


Care desigur ma depaseste :) Habar nu am ce face acel cod. Oricum nu merge si atunci m-am gandit sa scriu eu alt cod. Si am ajuns pe acest site si am citit acel tutorial si am incropit codul din mesajul anterior. Dar nu merge nici cu optiunea "friendly u.r.l." nici fara. Sunt jurnalist nu programator, dar stiu html si putin php :) asadar ma ocup eu si de partea tehnica a site-ului, dar treaba asta clar ma depaseste si nu am niciun prieten care sa ma ajute sa elucidez misterul.

PS - Am scris u.r.l. cu puncte fiindca nu ma lasa sa postez legat. Treaba aia cu minim 5 posturi, stiti voi :)

Avatar utilizator
Birkoff
Senior Member
Mesaje: 6380
Membru din: Joi Mar 18, 2004 2:34 pm
Localitate: Bucuresti
Contact:

Mesajde Birkoff » Sâm Dec 18, 2010 7:18 pm

greatelf scrie:Salut,
Doresc site.ro/article/categorie/182/
sa redirectioneze spre:
site.ro/index.php?mod=article&cat=categorie&article=182


incearca asa

Cod: Selectaţi tot

RewriteEngine On
RewriteBase /
RewriteRule ^(article)/(categorie)/([0-9]+)$ index.php?mod=$1&cat=$2&article=$3 [NC, L]

daca (categorie) nu e cuvant cheie ci se schimba in functie de categorie atunci pui ([a-zA-Z]+)
1) CMS, ERP, CRM, etc... (doar pentru clienti))
2) Portofoliu, servicii, contact, blog
3) Folositi aceasta clasa sql in proiectele voastre (open source)
4) Vrei un magazin virtual la cheie, usor de folosit, cu api-uri incluse pentru maximizarea vanzarilor si multe alte facilitati? Da un semn si discutam.

greatelf
PHPRomania Supporter
Mesaje: 5
Membru din: Sâm Dec 04, 2010 11:04 pm

Mesajde greatelf » Sâm Dec 18, 2010 9:28 pm

In primul rand vreau iti multumesc foarte mult Birkoff pentru raspuns. Aproape ca am rezolvat-o.
Am introdus asa:

Cod: Selectaţi tot

RewriteEngine on
RewriteBase /
RewriteRule ^(article)/([a-zA-Z]+)/([0-9]+)$ index.php?mod=$1&cat=$2&article=$3 [NC,L]


Si face redirectionarea dar cu o mica problema. Css-ul, imaginile etc. in loc sa aiba adresa normala, de ex: "site.ro/images/topmenu_icon.gif", sunt cautate la "site.ro/article/categorie/172/images/topmenu_icon.gif", adica adauga toata dracia aia de cod inaintea caii si normal ca nu le gaseste sa le afiseze.
Stii cumva de ce? O fi de la .htaccess?
Mersi inca o data de ajutor, oricum am niste piste si incerc cate ceva, ca probabil e de la site, e un script tare alambicat.

Avatar utilizator
Birkoff
Senior Member
Mesaje: 6380
Membru din: Joi Mar 18, 2004 2:34 pm
Localitate: Bucuresti
Contact:

Mesajde Birkoff » Sâm Dec 18, 2010 9:34 pm

deci normal toate linkurile din pagina trebuie sa se supuna modificarilor din mod_rewrite...

eu de exemplu la site-ul din semnatura am asa:

1) in htacces fac redirectarile cum ti-am scris si tie mai sus
2) in codul php inainte sa se afiseze pagina fac preg_replace la toate linkurile din pagina ca sa se afiseze conform cu modificarile din htacces.

astfel de exemplu daca in cod am un link de genul

<a href="index.php?ceva=1"

fac preg_replace pe el inainte sa afisez pagina ca sa ajunga de forma

<a href="/ceva/1"

asa linkul va apare ok la vizitator si cand da clik pe el intra in actiune regulile din htacces care convertesc acel link si trimite datele la pagina care trebuie

ca sa nu am probleme nici un link nu e cu cale permanenta ci toate cu cale relativa iar in head am setat base ca toate linkurile sa faca referire incepand de la acea baza

<base href="http://www.tutorialeonline.net/" />
1) CMS, ERP, CRM, etc... (doar pentru clienti))
2) Portofoliu, servicii, contact, blog
3) Folositi aceasta clasa sql in proiectele voastre (open source)
4) Vrei un magazin virtual la cheie, usor de folosit, cu api-uri incluse pentru maximizarea vanzarilor si multe alte facilitati? Da un semn si discutam.

greatelf
PHPRomania Supporter
Mesaje: 5
Membru din: Sâm Dec 04, 2010 11:04 pm

Mesajde greatelf » Sâm Dec 18, 2010 10:31 pm

Am in header-ul paginii <base href="site.ro/" /> iar linkurile din pagini sunt de genul: "{TEMPLATE_PATH}/images/topmenu.gif". Nu inteleg cum exact sa schimb acest link. E un site cu mai multe template-uri.

Nu prea am inteles cum e cu preg_replace. Daca m-ai indruma spre un tutorial, ti-as fi recunoscator! Oricum ma simt foarte indatorat pentru ajutorul oferit si pana acum. Mersi!


Înapoi la “Servere Web”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 18 vizitatori