[PHP] Clean URL's Maken

Pagina: 1
Acties:
  • 59 views sinds 30-01-2008

  • JoostMartijn
  • Registratie: December 2003
  • Laatst online: 17-04-2025
Beste Tweakers,

Ik ben bezig met een nieuw CMS systeem. Ik ga dit vanaf de grond af aan herschrijven op basis van het mvc patern. Nu wil ik graag URI request laten afhandelen door 1 bestand. Na veel zoeken hier en bij Google ben ik er nog niet uit. Wat ik precies wil is bijvoorbeeld www.website.nl naar het bestand www.website.nl/action.php omleiden. Maar de URL www.website.nl/producten/443 ook. En hierbij moet de URI in tact blijven. Dus eigenlijk moet alles wat naar www.website.nl/ linkt doorverwezen (gerouteerd) worden naar dat ene bestand.

Mijn vraag aan jullie is hoe kan ik dat het beste doen. Ik ben al druk bezig geweest met htaccess bestanden, Rewriterule en Redirect maar die veranderen ook de URI. ik krijg dan URL's als www.website.nl/action.php

Weet iemand hier een mooie oplossing voor. Of heeft iemand een werkend voorbeeldje? :+

Alvast bedankt _/-\o_

Windsoft


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 12-02 17:47

gorgi_19

Kruimeltjes zijn weer op :9

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Stop AI Slop

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
# First, we add trailing slash if none is found. 
# Then, if the URI requested isn't a filename (like site.com/news/80), 
# point to index.php?arguments=news/80 (will be exploded in PHP)
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteCond $1 !^(images|styles|pgadmin|favicon\.ico|robots\.txt)
RewriteRule ^(.*)$ $1/

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond $1 !^(images|styles|pgadmin|favicon\.ico|robots\.txt)
RewriteRule ^(.*) index.php?arguments=$1 [L]

En dan in index.php:
PHP:
1
$arguments = explode("/", $_GET['arguments']);

Nu staan al je www.domein.nl/ar/gu/men/ten/ in de array $arguments.

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


  • JoostMartijn
  • Registratie: December 2003
  • Laatst online: 17-04-2025
Het is alleen de bedoeling dat ik geen ? teken in mijn url krijg. Ik wil gewoon op een bestand uit komen zonder dat ik ? af wat ook gebruik. Maar ik wil dat in de browser balk wel de gevraagde URl komt te staan. Zoals bijvoorbeeld. www.website.nl/producten/nu/84463

De FAQ heb ik ook al bekeken maar daar krijg ik nog niet wat ik wil :)

Windsoft


  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function multiviews($param)
   {
      $param = split('/', $param);
      $queryvars = array();
                
      for ($i=0;$i < count($param);$i++)
    {
       if (!$param[$i] == '')
        {
           $queryvars[] = $param[$i];
        }
    }
      return $queryvars;
   }
En in combinatie met met de Apache functie MultiViews. :)

Sole survivor of the Chicxulub asteroid impact.


  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02-2025
CodeCaster schreef op woensdag 18 oktober 2006 @ 14:28:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
# First, we add trailing slash if none is found. 
# Then, if the URI requested isn't a filename (like site.com/news/80), 
# point to index.php?arguments=news/80 (will be exploded in PHP)
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteCond $1 !^(images|styles|pgadmin|favicon\.ico|robots\.txt)
RewriteRule ^(.*)$ $1/

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond $1 !^(images|styles|pgadmin|favicon\.ico|robots\.txt)
RewriteRule ^(.*) index.php?arguments=$1 [L]

En dan in index.php:
PHP:
1
$arguments = explode("/", $_GET['arguments']);

Nu staan al je www.domein.nl/ar/gu/men/ten/ in de array $arguments.
Waarom zo'n overhead op je apache gooien, als dit ook gewoon makkelijk in PHP zelf kan? (En onafhankelijk is van extra eisen aan je apache installatie.)

Ergens in je intialisatie:
code:
1
$args =  explode("/", $_SERVER["REQUEST_URI"]);

Dan wordt een uri zoals /index.php/forum

Array ( [0] => [1] => index.php [2] => forum )

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Verwijderd

Idd, wat Grijze Vos zegt. En als je multiviews aanzet kan je ook af met index/forum. Of bijvoorbeeld forum/list_messages/1169672.

Dat geeft in forum.php bijvoorbeeld

Array ( [0] => [1] => forum [2] => list_messages [3] => 1169672)

  • JoostMartijn
  • Registratie: December 2003
  • Laatst online: 17-04-2025
Ik weet wel hoe ik het in Php goed kan krijgen. Dat is het probleem niet. Het probleem is alleen dat er vaak helemaal geen bestand staat waar de URL naar verwijst. Dus er is geen php bestand om de uri af te handelen.

Windsoft


  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Stop AI Slop

Nou, dat vertelt AtleX dus:

http://atlex.nl/index/site/#multiviews en
P&W FAQ - PHP

(waarvoor dank, ik zal t ook toe gaan passen :P)

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


  • Raynman
  • Registratie: Augustus 2004
  • Laatst online: 29-01 12:39
Nee, daarbij moet er wel een bestand met die naam bestaan. Toegevoegde waarde van multiviews is zoals gezegd het kunnen weglaten van de extensie.

De TS zal met rewrite_rules aan de gang moeten of toch voor een iets ander systeem kiezen.

  • Cartman!
  • Registratie: April 2000
  • Niet online
code:
1
2
3
4
5
6
7
8
9
10
11
12
RewriteEngine On

RewriteBase /

RewriteCond %{REQUEST_URI}  !/admin.*
RewriteCond %{REQUEST_URI}  !/images.*
RewriteCond %{REQUEST_URI}  !/styles.*
RewriteCond %{REQUEST_URI}  !/scripts.*
RewriteCond %{REQUEST_URI}  !robots.txt.*
RewriteCond %{REQUEST_URI}  !favicon.ico.*

RewriteRule ^(.*)           index.php?$1


En dan in je index.php de string exploden op de slash. Vervolgens kun je met een switch statement de goede pagina includen en daar de data verder uitpluizen. Werkt echt goud :)

De RewriteCond's zijn voor het excluden van bepaalde files of directory's.

[ Voor 20% gewijzigd door Cartman! op 18-10-2006 20:35 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

Dit staat allemaal, zoals vele mensen hierboven al zeggen, zeer compleet in onze FAQ uitgelegd. Volgende keer dus even wat beter zoeken voor je een topic opent asjeblieft. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1

Dit topic is gesloten.