Hjälp med en mod_rewrite-regel

Tråden skapades och har fått 7 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • Stockholm
  • 2006-07-16 00:15

Hej,

Skulle vilja använda mod_rewrite för att styra om internt vilka dokument som faktiskt används.

Går någon till
/show_t1.php?id=22

så vill jag att mod_rewrite skriver om anropet till typ
/index.php?goto=show&id=22

Försökte med följande men det verkar inte fungera
RewriteRule ^show_t1.php?id=([0-9]+)$ moved.php?id=$1 [L]

har även provat följande utan framgång
RewriteRule ^show_t1.php?id=151$ moved.php [L]

Någon som vet ifall det går att ordna?

  • Medlem
  • Göteborg
  • 2006-07-16 00:39

Du måste escapa frågetecknet. Pröva att använda \? i första delen.

  • Medlem
  • Stockholm
  • 2006-07-16 08:06

RewriteRule ^show_t1.php\?id=([0-9]+)$ moved.php [L]

verkar tyvärr inte heller fungera

  • Medlem
  • Mölndal
  • 2006-07-16 15:38

Några dumma frågor:
Är mod_rewrite aktiverat?
Är .htacccess (eller var du lagt regeln) aktiverad?
Fungerar det med en enkel redirect av alla anrop till en annan sida?
typ
RewriteRule ^(.*)$ http://other.example.com/$1

Lägg till [R] sist för att skicka tillbaka en redirect till klienten, så att du ser vilken sida du pekas om mot.

Här finns några enkla exempel att prova
http://tomclegg.net/rewriterule

  • Medlem
  • Stockholm
  • 2006-07-16 17:27
Ursprungligen av memark:

Några dumma frågor:
Är mod_rewrite aktiverat?
Är .htacccess (eller var du lagt regeln) aktiverad?
Fungerar det med en enkel redirect av alla anrop till en annan sida?
typ
RewriteRule ^(.*)$ http://other.example.com/$1

Lägg till [R] sist för att skicka tillbaka en redirect till klienten, så att du ser vilken sida du pekas om mot.

Här finns några enkla exempel att prova
http://tomclegg.net/rewriterule

1. mod_rewrite är aktiverat och fungerar med mina andra regler
2. ja
3. ja, alla anrop till en annan sida fungerar
4. hjälper inte eftersom min regel inte matchar

tyvärr hittade jag inget på exempelsidan.

Jag bryter ner regeln i mindre bitar och kan då komma så här långt

RewriteRule ^show_t([1|2|3|4|5|6]{1})(\.)php(.*)$ mapper.php\?page=$1 [QSA,L]

men av någon anledning kan jag inte komma vidare efter .php
Skriver jag dit \? så följer inte query-strängen med. Och fortsätter jag med id= så blir det 404.

Någon som förstår sig på detta?
Jag skulle vilja att regeln var ungefär såhär

RewriteRule ^show_t([1|2|3|4|5|6]{1})(\.)php\?id=([0-9]+)$ mapper.php\?page=$1&id=$2 [QSA,L]

Du måste använda en RewriteCond för att matcha querysträngen (QUERY_STRING) eftersom den inte ingår i REQUEST_URI:

RewriteCond %{QUERY_STRING} id=([0-9]+)
RewriteRule ^show_t([1|2|3|4|5|6])\.php$ mapper.php?page=$1&id=%1 [R]

Det ser ut att fungera fint när jag testar.

Notera att matchningar i RewriteCond skrivs ut med % i stället för $.

  • Medlem
  • Stockholm
  • 2006-07-17 23:46

Suveränt!!
Det där hade jag ingen aning om. Det måste jag helt klart läsa på mer om

Stort tack, fungerar utmärkt!

  • Medlem
  • Mölndal
  • 2006-07-22 22:39

Så självklart när man (in)ser det! Bra jobbat, system.log!

1
Bevaka tråden