webForumDet fria alternativet

Url-hanterare

4 svar · 330 visningar · startad av nighteye

nighteyeMedlem sedan sep. 200260 inlägg
#1

Håller på att försöka skapa ett URL-hanteringsskript, men lyckas inte få det att fungera riktigt. Skriptet ska fungera på följande sätt.

skript.php?url=apa // Skickar användaren till apa.php
skript.php?url=index&katalog=blah //skickar användaren till /blah/index.php
skript.php //skickar användaren till default sidan (index.php)

Det ska inte gå att exekvera externa url'er i skriptet.

Har försökt bygga det med switch satser men får det inte att fungera, jag hamnar alltid på samma sida hela tiden gör antagligen nånting fel. Någon som har några förslag eller idéer hur det här problemet skulle kunna lösas på bästa sätt?

pimmeMedlem sedan sep. 20011 086 inlägg
#2

$_GET["url"] innehåller det värde du ger url i adressen
$_GET["katalog"] innehåller det värde du ger katalog i adressen

$path = "";
if(!empty($_GET["katalog"]))
$path = $_GET["katalog"] . "/";
if(!empty($_GET["url"]))
$path .= $_GET["url"] . ".php";
else
$path = "index.php";

include($path) inkluderar $path i sidan
header("Location: " . $path);  skickar användaren vidare till sidan (obs, du får inte skriva ut något innan du använder header())
nighteyeMedlem sedan sep. 200260 inlägg
#3

Tack för koden! Ska genast testa och se om jag får det att funka.
Vet redan det där med header(), jag är ingen n00b ;-)

MatteMedlem sedan aug. 20002 975 inlägg
#4

Du ska få en annan variant av mig.

Du använder i ditt exempel ett fall med relativ sökväg och ett fall med absolut sökväg. Håll dig till endera.

Med absolut sökväg:

// Tillåtna sökvägar
$allowed = array('/apa.php', '/blah/index.php');

if (isset($_GET['url'])) {
  $path = "/".$_GET['url'];
} else $path = "/";

if (isset($_GET['katalog'])){
  $path = "/".$_GET['katalog'].$path;
}

// Kollar om sökvägen är tillåten
if (in_array($path, $allowed)) {

  // inkludering
  include $_SERVER['DOCUMENT_ROOT'].$path;
  
  // Location
  header("Location: $path");

} else {
  header("Location: /index.php");
}

Med relativ sökväg:

// Tillåtna sökvägar
$allowed = array('apa.php', 'blah/index.php');

if (isset($_GET['url'])) {
  $path = $_GET['url'];
} else $path = "";

if (isset($_GET['katalog'])){
  $path = $_GET['katalog']."/".$path;
}

// Kollar om sökvägen är tillåten
if (in_array($path, $allowed)) {

  // inkludering
  include $path;
  
  // Location
  header("Location: $path");

} else {
  header("Location: index.php");
}
nighteyeMedlem sedan sep. 200260 inlägg
#5

Pimme's kod fungerade fint, förutom att man behövde lägga till exit; innan header funktionen för att få bort varningsmeddelandet ang. att headerinformation redan är ditlagt på sidan som den visar. Bockar och bugar för Matte's kod oxå :)

134 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)