Problema rescriere link-uri cu mod rewrite

Probleme, intrebari si subiecte legate de Server Apache, setari in fisier htaccess si Gazduire site-uri Web (Hosting).
Avatar utilizator
steell
Mesaje: 190

Problema rescriere link-uri cu mod rewrite

Salut. Vreau sa rescriu toate link-urile din site astfel incat sa dispara tot ceea ce este dupa semnul intrebarii inclusiv acest semn si nu mai stiu cum se procedeaza. Link-urile nu sunt toate la fel. Unele contin mai multe variabile, altele mai putine, unele sunt in folderul root al site-ului, altele in 2 directoare mai sus.
Ex:

Cod: Selectaţi tot

www.site.ro/dir1/di2/pagina.php?a=ceva;b=ceva
www.site.ro/index.php?c=ceva
sa rezulte in

Cod: Selectaţi tot

www.site.ro/dir1/di2/pagina.php
www.site.ro/index.php

MarPlo Mesaje: 4343
Salut
Felul in care vrei sa schimbi link-urile nu se poate, fiindca ai avea la toate aceeasi adresa.
Daca toate din root vor duce catre: "site.ro/index.php", fara nici o valoare /text de deosebire in adresa URL, cum crezi ca va sti scriptul php sa deschida alta agina? Va deschide aceeasi mereu.
Trebuie regandit modul de rescriere, astfel incat sa ai in adresa URL referinta la pagina /valoarea care trebuie transmisa la php.
De exemplu, ceva de genul:

Cod: Selectaţi tot

site.ro/dir1/di2/ceva_altceva
site.ro/ceva
In rest, poti invata din acest tutorial: mod-rewrite cum se pot rescrie link-urile in .htaccess.

- Sau poate vrei un Redirect 301 de la toate acele pagini catre una singura. Daca e asta, se poate direct in codul PHP.
Cam asa:

Cod: Selectaţi tot

if(isset($_GET['a'])) {
  header("Location: pagina.php",TRUE,301);
}
 

cadou Mesaje: 328
salut!
Am si eu o problema cu rescrierea unei adrese in htaccess :

Cand adaug aceasta rescriere de adresa:

Cod: Selectaţi tot

RewriteRule ^mesaje/([A-Za-z0-9-_]+).php$ mesaje/autor.php?autor=$1 [NC,L]
nu imi mai merge nici un link din sectiunea "mesaje" , daca scot aceasta regula, imi merge restul.
Aceasta regula:

Cod: Selectaţi tot

RewriteRule ^mesaje/([A-Za-z0-9-_]+)/([0-9]+).php$ mesaje/autor.php?autor=$1&pagina=$2 [NC,L]
este ok, imi merge.

la accesare adresa .../mesaje/UNnume.php - nu merge - aici vreau sa fac modificarea de adresa,
din .../mesaje/autor.php?autor=XXX sa rescriu adresa in .../mesaje/XXXX.php :)
la accesare adresa .../mesaje/unNUME/5.php - merge

Sper ca am fost inteles, ms de ajutor!

MarPlo Mesaje: 4343
Ceea ce vrei sa faci nu merge daca vrei sa si folosesti in script fisiere php din directorul 'mesaje/', fiindca regula:

Cod: Selectaţi tot

mesaje/([A-Za-z0-9-_]+).php
- reprezinta fisierele php din acel directorul, deci actioneaza si asupra apelarilor de fisiere .php din "mesaje/".

Indicat e sa scoti extensia '.php' din link-ul rescris, oricum nu are nici o folosinta daca nu se apeleaza pe server acel fisier php rezultat din rescriere.
Tendinta si la framework-urile php moderne e simplificare a link-urilor, cu datele strict necesare, fara extensie (Extensia e pt. fisiere).

- La adresele care le ai, eu asi face asa, fara a afecta vreu tip de fisier:

Cod: Selectaţi tot

RewriteRule ^mesaje/([A-Za-z0-9-_]+)$ mesaje/autor.php?autor=$1 [NC,L]
RewriteRule ^mesaje/([A-Za-z0-9-_]+)/([0-9]+)$ mesaje/autor.php?autor=$1&pagina=$2 [NC,L]
- Si se folosesc link-uri:

Cod: Selectaţi tot

.../mesaje/UNnume
.../mesaje/unNUME/5

cadou Mesaje: 328
Multumesc pentru raspuns!
Am sa iti ascult sfatul, doar pentru partea de adrese ce va contine .../mesaje/UnNume si pentru .../mesaje/unNume/5, pentru ca daca as face asta la toate link-urile de pe site, as avea de modificat o gramada :D . asa ca pe viitor asa am sa fac, usor usor le voi schimba... pentru moment las asa :) .
Multumesc inca odata :)

cadou Mesaje: 328
Marplo, revin cu o problema referitor la rescrierea acestor adrese, am incercat sa scot extensiile din adresa, dar am intampinat ceva probleme pe "ici pe colo".

Deci am regula asta de rescriere adresa:

Cod: Selectaţi tot

 
RewriteRule ^([A-Za-z0-9-_]+)$ users/profil/profil.php?nume=$1 [NC,L]
Deci adresa ar fi de forma ...ro/unNume

dar daca vreau sa scot extensia php din adresa ....ro/intrebari , astfel:

Cod: Selectaţi tot

RewriteRule ^intrebari$ intrebari/intrebari.php [NC,L]
la accesarea adresei ....ro/intrebari , primesc eroarea de de 404 pe care am definit-o ...
cumva se "bat " cele 2 reguli care le-am prezentat ?

P.S am vazut ca se mai pot rescrie adrese de forma:

Cod: Selectaţi tot

RewriteRule ^(.*)$ intrebari/intrebari.php [NC,L]
Care ar fi diferenta intre cel cu A-Za ... si (.*) ?

MarPlo Mesaje: 4343
Expresia: (.*) - contine toate tipurile de caractere.
Expresia: ([A-Za-z0-9-_]+) - reprezinta doar ce e specificat intre parantezele patrate: Litere, Numere si liniute (deci e in conflict cu: ^intrebari$ ).

- Inearca asa:

Cod: Selectaţi tot

RewriteRule ^intrebari$ intrebari/intrebari.php [NC,L]
RewriteRule ^((?!intrebari$)[A-Za-z0-9-_]+)$ users/profil/profil.php?nume=$1 [NC,L]

cadou Mesaje: 328
Si daca am mai multe "conflicte", nu doar cu 'intrebari" ?
Ca ceva idei ce sa pun pe site, si am cateva adrese la care nu am scos ".php" ca nu am putut de acel conflict ... :D

MarPlo Mesaje: 4343
Vezi daca merge asa:

Cod: Selectaţi tot

RewriteRule ^intrebari$ intrebari/intrebari.php [NC,L]
RewriteRule ^file1$ dir/file1.php [NC,L]
RewriteRule ^file2$ dir/file2.php [NC,L]
RewriteRule ^file3$ dir/file3.php [NC,L]
RewriteRule ^((?!intrebari|file1|file2|file3$)[A-Za-z0-9-_]+)$ users/profil/profil.php?nume=$1 [NC,L]

cadou Mesaje: 328
tot eroarea de 404 o primesc .... , asta e am sa las cu .php ce nu merge sa scot php si asta e .... daca nu exista solutii ... ce sa fac ...
multumesc de ajutor

Subiecte similare