Problema Mod Rewrite

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

Problema Mod Rewrite

Buna am si eu o problema cu mod rewrite. Eu am aceasta pagina:

citeste_stire.php?titlu=Fenomen-incredibil-in-Brazilia-20tornada-de-foc!&id=7

Cum as putea so transform in forma asta:

Fenomen-incredibil-in-Brazilia-tornada-de-foc.html??

Eu am incercat asa dar nu merge:

RewriteRule ^citeste-(.*)-(.*).html /citeste_stire.php?titlu=$1&id=$2

plS helP
Se spune ca...."omul tot invata in viata". Dar...Totusi...Trebie sa ne oprim undeva, nu?

MarPlo
Incearca asa:

Cod: Selectaţi tot

Options +FollowSymLinks
RewriteEngine On

RewriteRule ^([a-zA-Z -]+)_([0-9]+).html$ citeste_stire.php?titlu=$1&id=$2 [NC,L] 
- Iar link-ul trebuie sa fie: Fenomen-incredibil-in-Brazilia-tornada-de-foc_7.html
numarul de la urma, dupa "_" , e necesar pt. id

claUdiu
Multumesc, am fkt cum miai zis tu dar akm imi da 500 internal server error si cand sterg tot din htaccess imi merge carea ar fi problema??

In .htaccess am:

Cod: Selectaţi tot

RewriteEngine on 
RewriteBase / 
RewriteRule ^acasa.html$ /index.php
RewriteRule ^([a-zA-Z -]+)_([0-9]+).html$ citeste_stire.php?titlu=$1&id=$2 [NC,L]
Se spune ca...."omul tot invata in viata". Dar...Totusi...Trebie sa ne oprim undeva, nu?

MarPlo
Nu stiu care sa fie problema, incearca formula rewrite asa:
RewriteRule ^domeniu_site/([a-zA-Z -]+)_([0-9]+).html$ citeste_stire.php?titlu=$1&id=$2

- Daca si asa da eroare, nu am idee. Poate stie altcineva mai bine.

claUdiu
Da si acuma da erroare dar am rezolvato asa:

RewriteRule ^citeste-(.*).html /citeste_stire.php?url=$1

Acuma mai am o problema.

La mine pe site se pot da si commentari iar cand cineva il posteza se inregistreaza pagina de pe care so postat in baza de date, dar cand cineva scrie commentari nu il arata.

Eu akm am pagina asa: " http:// www .site.do/citeste-Stirea-Zilei.html " daca dau commentari de pe pagina asta nu mil arata iar daca fk urlu asa:
" http:// www .site.do/citeste_stire.php?url=Stirea-Zilei " mi-l arata. cum as putea sa-mi arate commentari cand e dat de pe o adresa transformata cu mod rewrite? Ms mult pentru ajutor - klaus;)
Se spune ca...."omul tot invata in viata". Dar...Totusi...Trebie sa ne oprim undeva, nu?

MarPlo
Explicatia ar fi ca din baza de date e preluat comentariul dupa valoarea lui $_GET['url'] iar in cazul adresei cu .html nu mai preia acea valoare. De ce, nu-mi dau seama. Trebuie vazut codul PHP care preia comentariile din mysql, si niste teste, de exemplu cu un echo $_GET['url']; ca sa vezi daca acel "echo" afiseaza aceeasi valoare la ambele adrese.

claUdiu
Scriptu care preia datele din baza de date e:

Cod: Selectaţi tot

<?php
$id=$_GET['id'];
$conn = mysql_connect("localhost", "stirisite", "stirisite")
    or die("Unable to connect to MySQL");
$selectdb = mysql_select_db('stirisite');
$cerereSQL = 'SELECT * FROM commentari WHERE articolul="'.$id.'"'; 
$rezultat = mysql_query($cerereSQL);
if(mysql_num_rows($rezultat) > 0) {
while($rand = mysql_fetch_array($rezultat))	{ 
echo                   	     '<div class="commentsContainer"> 
		<div class="comments"> 
				<a name="comentarii"></a> 
			<div class="oneComment"> 
			<div class="commentName"> 
				'. $rand['nume']. '				<span>('. $rand['data']. ' '. $rand['ora']. ')</span> 
			</div> 
			<span class="theText">'. $rand['mesaj']. '</span> 
			
 					</div> </div></div>';
 }
}
?>
Si am facut testul de care zici tu. Pe pagina asta: http:// www .site.do/citeste_sitrea.php?url=Stire&id=7 imi apare ID-ul in pagina iar daca intru pe pagina http:// www .site.do/citeste-Stire_7.html nu imi apare ID-ul in pagina. Cum as putea sa fac sami apara?
Se spune ca...."omul tot invata in viata". Dar...Totusi...Trebie sa ne oprim undeva, nu?

MarPlo
Trebuie adaugat in codul rewrite si 'id' cu numarul, adica sa ai $1 pt. 'url' si $2 pt. 'id', ca sa inlocuiasca pe server adresa cu ".html" exact cum trebuie ea cu ".php?...". Pentru asta trebuie in formula 2 paranteze rodunde cu Regex, una pt. $1 si a doua pentru $2
Incearca formula rewrite asa:
RewriteRule ^citeste-([a-zA-Z -]+)_([0-9]+).html /citeste_stire.php?url=$1&id=$2

claUdiu
Cu codul de la tine imi da 500 internal server error:-?? dar eu deja am in .htaccess:

Cod: Selectaţi tot

RewriteEngine on 
RewriteBase / 
RewriteRule ^acasa.html$ /index.php
RewriteRule ^citeste-(.*)_(.*).html /citeste_stire.php?url=$1&id=$2
RewriteRule ^categoria-(.*).html /stiri.php?categorie=$1
Se spune ca...."omul tot invata in viata". Dar...Totusi...Trebie sa ne oprim undeva, nu?

MarPlo
Aceasta formula (.*)_(.*) intra in conflict deoarece (.*) cuprinde toate caracterele, deci si liniuta joasa "_" si ce e dupa ea, de asta nu mai stie cand a trecut la urmatoarea paranteza si ce contine ea pt. $2, fiindca deja prima paranteza cuprinde tot sirul.
Ideea e sa fie facute 2 paranteze care sa nu intre in conflict.
Nu imi dau seama de ce da eroare 500, mai trebuie lucrat la codul Regex din paranteze. Incearca totusi si asa:
RewriteRule ^citeste-(.[^_]*)_([0-9]*).html /citeste_stire.php?url=$1&id=$2

MarPlo
Aceasta formula (.*)_(.*) intra in conflict deoarece (.*) cuprinde toate caracterele, deci si liniuta joasa "_" si ce e dupa ea, de asta nu mai stie cand a trecut la urmatoarea paranteza si ce contine ea pt. $2, fiindca deja prima paranteza cuprinde tot sirul.
Ideea e sa fie facute 2 paranteze care sa nu intre in conflict.
Nu imi dau seama de ce da eroare 500, mai trebuie lucrat la codul Regex din paranteze. Incearca totusi si asa:
RewriteRule ^citeste-(.[^_]*)_([0-9]*).html /citeste_stire.php?url=$1&id=$2

claUdiu
Tot erroare da, dar am facut o modificare in loc de _ (bara jos) sa fie - (liniuta) acuma apare ID-ul din url si pe pagina transformata cu Mod Rewrite dar nu apare commentariul....
Se spune ca...."omul tot invata in viata". Dar...Totusi...Trebie sa ne oprim undeva, nu?

Subiecte similare