-
Ajutor redirect
Va rog daca ma poate ajuta cineva cu un redirect in htaccess. pt ca primesc o eroare si nu stiu de ce.
In htaccessul meu am asa ceva:
RewriteRule -id_produs-(.*)\.html index.php?id_produs=$1
Comanda de mai sus transforma cu success:
www.mysite.com/index.php?id_produs=2760
in
www.mysite.com/index.php-id_produs-2760.html
Totul e ok pana aici. Dar cand vreau sa-i fac si o redirectionare am adaugat la functia de mai sus asa:
RewriteRule -id_produs-(.*)\.html index.php?id_produs=$1 [R=301,L]
...DAR imi redirectioneaza gresit ..si anume catre:
http://www.mysite.com/home/Myhosting...id_produs=2760
..observ ca se duce untr-un fel in radacina paginii de pe server si se termina in acel Id_produs tot in php. ...sincer sa fiu ma depaseste complet...Nu stiu ce am gresit..am cautat tot netul asta o explicatie...toti spun ca [R=301,L] e corect dar mie numi merge. Am scris RewriteRule gresit? ..nu cred pt ca rewrite-rul merge ok. Doar redirectionarea nu merge.
Please HElp me!
-
Nu ai incercat sa folosesti semnul ^?
ceva de genul
RewriteRule ^-id_produs-(.*)\.html index.php?id_produs=$1 [R=301,L]
-
Am incercat dar tot nu merge. Daca bag semnul ^ nu mai merge rewrite-ul. Ma gandeam sa scot index.php?id_produs=$1 si sa pun rewritecond. apoi sa scriu ceva de genu
Rewritecond (aici nu stiu cum sa formulez ca sa fie doar pt adresele index.php?id_produs=$1)
RewriteRule -id_produs-(.*)\.html [R=301,L]
e posibil asa sa mearga.
-
Am descoperit problema dar...partial
Exemplu , am adaugat http://www.mysite.com in cod
RewriteRule -id_produs-(.*)\.html http://www.mysite.com/index.php?id_produs=$1 [R=301]
dar...imi redirectioneaza catre pagina cu php (nu HTML)
respectiv:
www.mysite.com/index.php?id_produs=2760
in loc de:
www.mysite.com/index.php-id_produs-2760.html
am incercat sa pun [R=301] (in cod ) dupa .html (ca sa-mi redirectioneze catre html dar nu merge asa.
Ma puteti ajuta?
-
Pai tu ai scris acolo ca url de forma -id_produs-(.*)\.html sa fie redirectionate la adresa http://www.mysite.com/index.php?id_produs=$1
Si eu stiam ca se foloseste ^ pentru inceput, si $ pt sf. expresiei regulate
Incearca asa:
RewriteCond %{REQUEST_URI} ^index.php\?id_produs=([a-zA-Z0-9]*)$
RewriteRule index.php-id_produs-$1.html [R=301]
Ceva de genu. Nu am testat
PS: de ce "index.php-id_produs"? nu mi se pare prea friendly..
-
tot nu merge. In cazul de mai sus nu-mi mai gaseste "index.php-id_produs-$1.html " (adica rescrierea...imi da page not found). uhhhh :(
-
Scuze.. Am uitat sa mai raspund.
Mai ai nevoie?
Daca da, uite un cod care merge. Am testat localhost.
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !\.html$
RewriteCond %{QUERY_STRING} ^id_produs=([0-9]+)$
RewriteRule (.*) index.php-id_produs-%1.html? [R=301]
RewriteRule ^index.php-id_produs-([0-9])+\.html$ index.php?id_produs=$1 [L]
In mare:
- daca URL nu se termina in ".html" si daca query string e de forma id_produs=nr atunci redirecteaza URL-urile de forma index.php?id_produs=nr la index.php-id_produs-nr.html
- (.*) din RewriteRule e dependent de RewriteBase. Sa fie setat corespunzator.
- semnul "?" de la sfarsitul RewriteRule indica sa nu mai puna nici un string dupa acel URL la redirect
Sau mai poti face redirectul dinspre URL vechi inspre URL nou din PHP. Iar atunci codul din .htdocs va arata:
RewriteEngine On
RewriteRule ^index.php-id_produs-([0-9])+\.html$ index.php?id_produs=$1 [L]