webForumDet fria alternativet

Skriva om länk (mod_rewrite)

PHP

9 svar · 790 visningar · startad av Guldstrand

Medlem sedan juli 20041 271 inlägg
Frågan#1

Resultat av koden nedan, ger följande:

annonser/?sokord=faaaaaaaaaaaaan&typ=dvd

..men jag vill ha det till

annonser/sokord/faaaaaaaaaaaaan/typ/dvd

$search = trim($_GET['sokord']);
$class = $_GET['typ'];
if ($class == 'alla')
  $class = "";

if ($search != '' || $class)
{
  $query = "rubrik LIKE " . sqlesc("%$search%") . "";
	if ($search)
		  $q = "/sokord/" . htmlspecialchars($search). "";
}
else
{
	$letter = trim($_GET["bokstav"]);
  if (strlen($letter) > 1)
    die;

  if ($letter == "" || strpos("abcdefghijklmnopqrstuvwxyz", $letter) === false)
    $letter = "a";
  $query = "rubrik LIKE '$letter%'";
  $q = "bokstav=$letter";
}

if ($class)
{
  $query .= " AND typ='$class'";
  $q .= "/typ/$class";
}

print("<form method=get action=./annonser/>\n");
print("<input type='text' name='sokord' class='input-text_medium' /> ");
print("<select name=\"typ\" class=\"sel_menu\">\n");
print("<option value=\"alla\">(alla typer)</option>\n");
print("<option value=\"dvd\">DVD</option>
<option value=\"blu-ray\">BLU-RAY</option>
<option value=\"vhs\">VHS</option>");
print("</select>\n");
print("<button id=\"submit\" type=\"submit\">sök</button>\n");
print("</form>\n");

Har följande i min .htaccess-fil:

RewriteRule ^annonser/sokord/([A-Za-z0-9_\-]+)/typ/([A-Za-z0-9_\-]+)$ annonser.php?sokord=$1&typ=$2 [L,QSA]
Medlem sedan juli 20041 271 inlägg
#2

Ingen som kan se vad jag kan ha gjort för fel? :(

Medlem sedan juni 20014 421 inlägg
#3

Men herregud, måste du *alltid* bumpa dina trådar, nu är värre än vanligt, det har gått 4 timmar. Folk ser din tråd ändå. Skärpning.

Medlem sedan aug. 20039 340 inlägg
#4
  1. Du skriver annonser/?sokord=faaaaaaaaaaaaan&typ=dvd i exemplet men annonser.php i koden. Det var säkert bara ett skrivfel i exemplet, men jag noterade det.
  2. Du har med - i ditt uttryck. Bindestrecket har ju en speciell betydelse i teckenklasser, och jag har för mig att olika versioner av Apache har olika regler för hur tecknet ska anges i teckenklasser. Prova att sätta bindestrecket först i uttrycket, alltså [-A-Za-z0-9_] alt. ta bort det tillfälligt.
Medlem sedan juli 20041 271 inlägg
#5

nitro2k01 skrev:

  1. Du skriver annonser/?sokord=faaaaaaaaaaaaan&typ=dvd i exemplet men annonser.php i koden. Det var säkert bara ett skrivfel i exemplet, men jag noterade det.
  2. Du har med - i ditt uttryck. Bindestrecket har ju en speciell betydelse i teckenklasser, och jag har för mig att olika versioner av Apache har olika regler för hur tecknet ska anges i teckenklasser. Prova att sätta bindestrecket först i uttrycket, alltså [-A-Za-z0-9_] alt. ta bort det tillfälligt.

Var har jag angivit annonser.php i koden? :q
Det hjälpte inte att ta bort bindestrecket, fick samma resultat ändå.

Medlem sedan aug. 20039 340 inlägg
#6

Guldstrand skrev:

Var har jag angivit annonser.php i koden? :q

I rewrite-regeln.

För övrigt så har du inte ställt någon fråga, så man får gissa sig till vad du menar, exakt. Jag trodde det var rewriten som inte ville funka tills polletten ramlade ner och jag insåg att du ville få ut en adress på formen "annonser/sokord/faaaaaaaaaaaaan/typ/dvd" när man klickar sök i formuläret. (Eller...?)

Om det är det du vill så är mitt svar, jo, så kan man göra, men det är inte rätt! Att formuläret genererar en vanlig ?-länk som GET-formulär brukar, har inga nackdelar utom ev att det "ser lite fult ut". Det är sökmotorer som bryr sig om sådant, åtminstone enligt vad folk säger. Därmed kan det vara relevant att använda den "snygga" formen för permanenta länkar till sökningar. Men inte att formiläret genererar sådana URLer.

Medlem sedan juli 20041 271 inlägg
#7

nitro2k01 skrev:

insåg att du ville få ut en adress på formen "annonser/sokord/faaaaaaaaaaaaan/typ/dvd" när man klickar sök i formuläret. (Eller...?)

Korrekt...
Precis, det är fult.

Medlem sedan sep. 20088 inlägg
#8

Om du vill få sökformuläret över till den "snygga" URL:en så är det bara att implementera en JavaScript-lösning istället för din nuvarande med <form>. (Ta bort formulärtaggarna, låt inputs vara kvar, och byt submit till button med en onclick där en funktion tolkar om inputs till en "snygg" window.location)

Medlem sedan juli 20041 271 inlägg
#9

Xertoz skrev:

Om du vill få sökformuläret över till den "snygga" URL:en så är det bara att implementera en JavaScript-lösning istället för din nuvarande med <form>. (Ta bort formulärtaggarna, låt inputs vara kvar, och byt submit till button med en onclick där en funktion tolkar om inputs till en "snygg" window.location)

Är inte intresserad av att införa javascript.
Detta borde väl gå att lösa med php? :r

Medlem sedan sep. 20088 inlägg
#10

Guldstrand skrev:

Är inte intresserad av att införa javascript.
Detta borde väl gå att lösa med php? :r

Om du vill lösa detta på sådant sätt att besökaren fyller i formulär och blir skickad till en "snygg" URL så är det JavaScript som gäller i besökarens webbläsare. Du kan inte nyttja PHP på besökarens maskin.

Däremot så kan du ju förstås göra så att PHP tar emot en "ful" request, som den gör nu, och sedan redirectar besökaren till en "snygg" request. Det är dock inte den bästa lösningen, precis.

257 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)