webForumDet fria alternativet
Logga in / Bli medlem

Url-hanterare

PHP

4 svar · 332 visningar · startad av nighteye

Medlem sedan sep. 200260 inlägg
Trådstart#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?

Medlem 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())
Medlem 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 ;-)

Medlem 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");
}
Medlem 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å :)

263 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)