Re: stránka 404 v PHP

From: Jiří Hrazdil <konference (zavinac)>
Date: Sun, 07 Jan 2007 16:15:25 +0100
Jan Fiser wrote:
> Dobrý den,
> 
> mám udělanou stránku 404 (no udělanou - upravenou, pochází z
> http://alistapart.com/articles/perfect404/).
> V současné době jsem předělal strukturu webu, některé stránky zmizely,
> nebo přesněji mají jinou adresu.
> Myslel jsem, že je budu přesměrovávat pomocí htaccess, ale nemám v něm
> povoleno přesměrovávání a pomocí rewrite to nepůjde, nové adresy jsou
> úplně jiné, než staré.
> Vymyslel jsem následující:
> *********
> někdo chce starou stránku, ta není, dostane se tedy na 404, ta se
> podívá, jakouže stránku chtěl, pokud půjde o jednu ze známých stránek
> (dejme tomu archiv2002.html, archiv2003.html), vrátí mu 301 na
> novyarchiv2002, novyarchiv2003 a ukončí zpracování skriptu v 404.
> Pokud nebude stránka v seznamu, pojede stávající skript pro 404.
> *********
> Moje (ne)znalost PHP na to ale nestačí. Přiznám se, že jsem schopen
> mírně upravit existující skript, ale napsat nový nikoliv.
> Navrhnul jsem si tohle:
> 
> *************
> switch($_SERVER["REQUEST_URI"]):
>     case "/archiv2002.html";
>          
> $novastranka="view.php?cisloclanku=2006120004&nazev=novyarchiv2002";
>          presunuto();
>          $presunuto=TRUE;
>          break;
>     case "archiv2003.html";
>          
> $novastranka="view.php?cisloclanku=2006120015&nazev=novyarchiv2002";
>          presunuto();
>          $presunuto=TRUE;
>          break;
> endswitch;
> 
> function presunuto()
> {
> header("HTTP/1.1 301 Moved Permanently");
> header("Location: http://denicek.zestoda.net/".$novastranka);
> }
> 
> // a tady jsem měl v úmyslu použít proměnnou $presunuto pro ukončení
> skriptu, ale to už jsem taky nezvládl
> *************

funkci presunuto() uprav tak, aby po těch dvou Header()ech bylo Die(). 
Tím zaručíš, že po provedení přesměrování se 404 skript ukončí. (A pak 
navíc bude možno vymazat i řádek $presunuto = TRUE.

Btw tento skript se spoléhá na to, že proměnná $novastranka je dostupná 
i v kontextu funkce. To není úplně ideální, takže bych doporučil upravit 
každou větev toho switche na:

case "/archiv2002.html";
   presunuto("view.php?cisloclanku=2006120004&nazev=novyarchiv2002"); 

   break;

a změnit hlavičku funkce presunuto na
function presunuto($novastranka)

	hrazda
Received on 07. 01. 2007, 16:15 CET

This archive was generated by hypermail 2.2.0 : 07. 01. 2007, 16:15 CET