Avatar billede sorensen_123 Nybegynder
08. februar 2007 - 17:16 Der er 11 kommentarer og
1 løsning

404 avanceret fil

Hejsa,


Jeg mangler et script der gør følgene:
Når en side ikke kan findes (404 fejl) bliver man henvist til en php side, denne php fil skal gøre følgene:
Få fat i url fra den side man prøvede at komme ind på, men som ikke blev fundet. Lad os i eksemplet sige at den side jeg prøvede at gå ind på var: this-is-a-cool-page.html.
Når scriptet har fået url'en, skal den fjerne .html og -'er så der er "this is a cool page" tilbage.
Derefter skal den oprette forbindelse til mysql database og finde tabellen "pages", hvor der er en undertabel der hedder "pageurl", der skal den så søge i pageurl efter "this is a cool movie" og når den har fundet det, står der et id ud foran dette stykke (f.eks. 25), og så skal den henvise til page.php?page=25

Kort fortalt:
Man prøver at gå ind på siden this-is-a-cool-page.html, søger i databasen efter resultater, og viderestiller til den side der stemmer overens med den side man prøvede at komme ind på.

Kan det lade sig gøre?


Mvh.
Elias Sørensen
Avatar billede leif Seniormester
08. februar 2007 - 17:23 #1
Hvad så hvis der er flere mulige resultater ?
Avatar billede sorensen_123 Nybegynder
08. februar 2007 - 17:36 #2
altså, den skal ikke søge på et af ordene, men hele sætningen, og jeg ved at der ikke kommer flere resultater end et ;)

Men eller skal den bare gå til index.php
Avatar billede coderdk Praktikant
09. februar 2007 - 02:06 #3
404 er lidt rodet... Hvorfor ikke bruge mod_rewrite? Jeg antager at det skal foregå fra roden af sitet. Prøv at smide dette i en .htaccess:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*?)\.html page.php?page=$1

page.php vil så få this-is-a-cool-page i $_GET['page']
Avatar billede sorensen_123 Nybegynder
09. februar 2007 - 08:58 #4
Kan jeg ikke bruge til så meget da det er til et eksisterende system. Kan jeg ikke få et script der gør det samme som det jeg beskriver?
Avatar billede coderdk Praktikant
09. februar 2007 - 12:50 #5
Principielt jo, men hvorfor kan du ikke bruge det, bare fordi det er til et eksisterende system? Så laver du den jo bare lidt om:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*?)\.html pagename.php?name=$1

Og så opretter du pagename.php:

<?php

  // Slå $_GET['name'] op i databasen og find ID'et
  // Connect til databasen
  $sql = "SELECT id FROM pages WHERE pageurl = '" . mysql_escape_string( $_GET['name'] ) . "'";
  $qh = mysql_query( $sql ) or die( mysql_error() );
  if ( mysql_num_rows( $qh ) == 0 )
  {
      die( "Filen er ikke fundet..." );
  }
  $row = mysql_fetch_assoc( $qh );
  $_GET['page'] = $row['id'];

  require( "page.php" );

?>

Burde virke, så vidt jeg lige kan se ;P
Avatar billede sorensen_123 Nybegynder
09. februar 2007 - 17:40 #6
Ud fra koden kan jeg ikke se hvor den viderestiller til den rigtige side. Er det bare mig der tager fejl?
Avatar billede coderdk Praktikant
09. februar 2007 - 18:07 #7
$_GET['page'] = $row['id'];

  require( "page.php" );

Første sætter den ID som vi har fundet, den næste henter så din side der viser den rigtige side, den redirecter ikke - Den hentes ind i den aktuelle side.
Avatar billede sorensen_123 Nybegynder
11. februar 2007 - 12:50 #8
Men det skal jo kun ske når der kommer en 404 fejl på siden.

Når jeg overfører en htaccess fil med det du skrev, så virker min server ikke (kan ikke gå ind på nogen sider).

Ved du hvorfor?
Avatar billede coderdk Praktikant
11. februar 2007 - 13:39 #9
Hmm nej, det lyder næsten som du ikke kan bruge mod_rewrite?
Avatar billede sorensen_123 Nybegynder
11. februar 2007 - 15:55 #10
Kan man ikke lave noget i php med at tjekke referer side for at gøre noget af det samme?
Avatar billede coderdk Praktikant
11. februar 2007 - 16:09 #11
Du kan prøve med din oprindelige idé. I din .htaccess skriv:

ErrorDocument 404 /getpage.php

getpage.php skal i toppen så indeholde:

header( "200 OK" );

Så kan du få fat i hvad brugeren har i adresselinjen med: $_SERVER['REQUEST_URI'];
Avatar billede sorensen_123 Nybegynder
15. marts 2009 - 18:18 #12
Gammelt spørgsmål. Lukkes.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester