Gå til innhold

Alternativ til mod_rewrite?


Anbefalte innlegg

Lurer på om noen som har et alternativ for de som ikke har mod_rewrite installert (uten å måtte lage tusenvis av mapper eller installere andre moduler)? Har sett på virtual 404 men det funka dårlig pluss at det ble veldig stygt).

 

Nå bruker jeg: domene.no/?forside

 

Husker at jeg har sett metoder som: domene.no/index.php/forside , uten at index.php er en mappe. Hvordan funker det?

EDIT: ok, fant ut at det ikke var så vankselig å lage sånne urls (domene.no/index.php/forside) (var bare å passe på at jeg ikke hadde en mappe som heter index.php), men hvordan kan man bruke .htaccess til å fjerne .php, sånn at urlen blir domene.no/index/forside ?

 

Takker for svar.

Endret av MC2
Lenke til kommentar
Videoannonse
Annonse

//Read in URI
$uri = explode("/", $_SERVER['PATH_INFO']);
unset($uri[0]);

foreach($uri AS $foo) {
  if($foo !="") {
    if($last) {
      $_GET[$last] = $foo;
      unset($last);
    } else {
       $_GET[$foo] = "";
       $last = $foo;
    }
  }
}

Den snutten mener jeg skal kunne gjøre det du ber om.

Den tar og endrer f.eks index.php/variabel/verdi/ om til $_GET['variabel'] = verdi, med forbehold om feil.

Lenke til kommentar

Det finnes en del løsninger som kan simulere mod_rewrite.

En ting er mod_alias som lar deg mappe på samme måte som mod_rewrite men mot filsystemet.

En annen god mulighet er å ha en handler.php f.eks i webroten og sette den som 404-handler. Da kan du i den filen parse url-en som ble brukt for å komme dit og behandle deretter ved å servere rett respons.

 

Også har man muligheten som TH skisserte over her, som fungerer men er mindre kraftig dog.

Lenke til kommentar
//Read in URI
$uri = explode("/", $_SERVER['PATH_INFO']);
unset($uri[0]);

foreach($uri AS $foo) {
  if($foo !="") {
    if($last) {
      $_GET[$last] = $foo;
      unset($last);
    } else {
       $_GET[$foo] = "";
       $last = $foo;
    }
  }
}

Den snutten mener jeg skal kunne gjøre det du ber om.

Den tar og endrer f.eks index.php/variabel/verdi/ om til $_GET['variabel'] = verdi, med forbehold om feil.

6252417[/snapback]

Takk, men det er ikke et problem. Foretrekker faktisk å ha med ?e=mc². Problemet mitt er å finne ut det før spørsmålstegnet. Med andre ord, jeg vil ha en måte med at uansett hva du skriver i urlen vil peke til en fil, det mod_rewrite gjør.

 

Det finnes en del løsninger som kan simulere mod_rewrite.

En ting er mod_alias som lar deg mappe på samme måte som mod_rewrite men mot filsystemet.

En annen god mulighet er å ha en handler.php f.eks i webroten og sette den som 404-handler. Da kan du i den filen parse url-en som ble brukt for å komme dit og behandle deretter ved å servere rett respons.

 

Også har man muligheten som TH skisserte over her, som fungerer men er mindre kraftig dog.

6252500[/snapback]

Søkt på mod_alias, men tror ikke det er installert i en default apache?

 

Så på custom 404 metoden, men det funka dårlig. Jeg klarte å peke til catch.php filen min, men av en eller annen grunn virker det som om det er noen headers jeg har oversett. Har prøvd å sende HTTP/1.1 200 OK headern og sette $_SERVER[REDIRECT_REDIRECT_STATUS] og $_SERVER[REDIRECT_STATUS] til 200. Men uansett så sier den til nettleseren at siden ikke finnes. Er det noen headers jeg har oversett?

Lenke til kommentar
Søkt på mod_alias, men tror ikke det er installert i en default apache?

mod_alias

 

Så på custom 404 metoden, men det funka dårlig. Jeg klarte å peke til catch.php filen min, men av en eller annen grunn virker det som om det er noen headers jeg har oversett. Har prøvd å sende HTTP/1.1 200 OK headern og sette $_SERVER[REDIRECT_REDIRECT_STATUS] og $_SERVER[REDIRECT_STATUS] til 200. Men uansett så sier den til nettleseren at siden ikke finnes. Er det noen headers jeg har oversett?

6253667[/snapback]

 

Jeg har aldri implementert denne metoden fult ut selv, og jeg har ikke tid til å gjøre det akkurat nå.

Men jeg kan kjøre en test litt senere i dag og se hva som kan være grunnen til at du ikke får det til.

 

Edit: Da har jeg testet, og det fungerte smertefritt med en fil som inneholder følgende (tatt fra hodet der og da tror jeg det er rett header, men stiller ingen garanti ;)):

 

header("HTTP/1.1 200 Ok");
echo 'test';

Endret av Findus
Lenke til kommentar
mod_alias

Ok, så ikke at det hadde status base. Det var bare at den happe "mod_" prefix som av en eller annen grunn sa til meg at en modul ikke er installert ved default.

 

Edit: Da har jeg testet, og det fungerte smertefritt med en fil som inneholder følgende (tatt fra hodet der og da tror jeg det er rett header, men stiller ingen garanti ):

 

Ja, har gjort det samme også, og det vises selvfølgelig på samme måte som et 404 dokument også vises, men problemet er at hvis du gjør dette:

header("HTTP/1.1 200 Ok");
echo '<link href="bogus_dir/style.css" type="text/css" />';
echo '<div class="foo"></div>'

Og den handleren du har i webrooten må da selvfølgelig se etter filen style.css, som må finnes.

På denne måten vil ikke css filen bli loadet (ikke i FF men muligens av Opera for at denn prøver å parse det uansett). På samme måte funker det ikke hvis du prøver å submitte for validering til validator.w3.org for at det tror at det bare er en vanlig 404 side som vises, altså feil headers.

 

Men tingen er at jeg prøvde dette på mitt gamle webhotell, og der funket det fint, men hos b-one begynte dette problemet å dukke opp.

Lenke til kommentar
mod_alias

Ok, så ikke at det hadde status base. Det var bare at den happe "mod_" prefix som av en eller annen grunn sa til meg at en modul ikke er installert ved default.

 

Edit: Da har jeg testet, og det fungerte smertefritt med en fil som inneholder følgende (tatt fra hodet der og da tror jeg det er rett header, men stiller ingen garanti ):

 

Ja, har gjort det samme også, og det vises selvfølgelig på samme måte som et 404 dokument også vises, men problemet er at hvis du gjør dette:

header("HTTP/1.1 200 Ok");
echo '<link href="bogus_dir/style.css" type="text/css" />';
echo '<div class="foo"></div>'

Og den handleren du har i webrooten må da selvfølgelig se etter filen style.css, som må finnes.

På denne måten vil ikke css filen bli loadet (ikke i FF men muligens av Opera for at denn prøver å parse det uansett). På samme måte funker det ikke hvis du prøver å submitte for validering til validator.w3.org for at det tror at det bare er en vanlig 404 side som vises, altså feil headers.

 

Men tingen er at jeg prøvde dette på mitt gamle webhotell, og der funket det fint, men hos b-one begynte dette problemet å dukke opp.

6256180[/snapback]

 

Nå kjørte jeg en "wget --server-response <url>" og den spyttet ikke ut noen headers som tilsa 404 etter at jeg satte 200 Ok.

Problemet med style.css er ikke et problem siden du bruker 404-handler er det bare å opprette css-filen så fungerer den jo ;)

Jeg vil også anbefale deg, om du velger denne metoden, at du faktisk spytter ut 404 om du ikke finner den funksjonen som det blir bedt om.

 

Jeg må sjekke valideringen selv, det kan være at det enda er noen headers som ødelegger.

Lenke til kommentar

Yup, sender selvfølgelig riktige headers dersom filen ikke finnes. ;)

 

Det jeg mente med style.css var at hvis din handler fil er sånn:

<?php 
$url = explode("/",$_SERVER["REQUEST_URI"]);
$file = array_reverse($url);
$file = $file[0];

if($file == "style.css") {
 header(
 header("Content-type: text/css; charset=UTF-8");
 readfile("/somewhere/over/the/rainbow/style.css");
}
elseif(file_exists("/the/path/to/salvation/".implode("/",$url))) {
 header("HTTP/1.1 200 ok");
 include("the_default_page.php")
}
else {
 header("HTTP/1.1 404 Not Found");
 echo "foo_shizzle!"
};
?>

 

Ja, det med custom 404 funket hos mitt gamle webhotell, men ikke på b-one nå. Dem har ikke engang mod_alias.

 

Uansett, takk. Det finnes ingen andre alternativer til mod_alias og custom 404 som kan gi pretty urls?

Lenke til kommentar
Ja, det med custom 404 funket hos mitt gamle webhotell, men ikke på b-one nå. Dem har ikke engang mod_alias.

 

Uansett, takk. Det finnes ingen andre alternativer til mod_alias og custom 404 som kan gi pretty urls?

6256497[/snapback]

 

Nei egentlig ikke. Ikke som jeg kjenner til i alle fall.

Du får finne deg et bedre webhotel, eller så kan du høre med de hvorfor 404-metoden ikke fungerer, for det er egentlig ingen grunn til at det ikke skulle fungere. Titt også på hvilke headers som sendes fra siden med 404-metoden. Jeg vet ikke hvordan man gjør det i windows, men om du har et unixsystem så kan du bruke "wget --server-response http://site.com" eller "lynx -head http://site.com" for å dumpe de.

Lenke til kommentar
Ok, takk for all hjelpen! prøvd wget --server-response, men ga forsatt 404. Det virker som om b-one ignorer at php sender http status header...

6256774[/snapback]

Det kan godt være, i så fall ville jeg tatt kontakt med support hos de og hørt om det er tilfelle, og om de kan endre det.

Jeg har sett webhotel som hadde satt error_reporting(E_ALL) og sørget for at det ikke kunne overstyres fra brukeren, de fikk fin mail :D

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...