Scholieren.com forum

Scholieren.com forum (https://forum.scholieren.com/index.php)
-   Software & Hardware (https://forum.scholieren.com/forumdisplay.php?f=20)
-   -   [PHP] RewriteEngin (https://forum.scholieren.com/showthread.php?t=756256)

Martin 23-02-2004 10:08

[PHP] RewriteEngin
 
Ik wil voor mijn website gebruik gaan maken van de RewriteEngin om wat nettere URL's te creëren.

Nu heb ik het volgende opgedoken op PHPfreakz:

.htaccess
PHP-code:

RewriteEngine On
RewriteCond 
%{HTTP_HOST} ^dynamicdreams.nl/dev/*$
RewriteCond %{REQUEST_URI} !^/index/
RewriteRule (.*) /index/$1 

index.php
PHP-code:

<?
$file    = eregi_replace($_SERVER['SERVER_NAME'], "", $_SERVER['PHP_SELF']);   
$var    = explode("/", $file); 

/* print vars for debugging */
for($i = 1; $i <= 10;$i++ ){ 
    echo "$var[$i]<br>";
}
?>

De output van index.php:
Code:

dev
index.php

Op zich ziet dit er netjes uit, maar ik krijg dit niet voor elkaar:

http://www.dynamicdreams.nl/dev/fotoboek/1/ (bijvoorbeeld). Dan zegt het script Not Found
The requested URL was not found on this server.

Wat doe ik fout?

Enlightenment 23-02-2004 12:37

Vind je het niet véééél stoerder om *alle* requests door een master php file te behandelen? ;)

www.dynamicdreams/dit/kun/je/zelf/bedenken
en altijd gaat hij zelf naar een php file, dus als jij adv je database de betreffende url/node niet kunt vinden, display je een mooie 404 in de stijl van je website. Woei!

Martin 23-02-2004 12:39

Citaat:

Enlightenment schreef op 23-02-2004 @ 13:37:
Vind je het niet véééél stoerder om *alle* requests door een master php file te behandelen? ;)

www.dynamicdreams/dit/kun/je/zelf/bedenken
en altijd gaat hij zelf naar een php file, dus als jij adv je database de betreffende url/node niet kunt vinden, display je een mooie 404 in de stijl van je website. Woei!

Is uiteindelijk wel de bedoeling, maar ik wil eerst ff proef draaien op dd.nl/dev.

Hoe pas ik de code nou aan zodat het wél werkt?

Enlightenment 23-02-2004 12:45

Dan moet je regex goed werken, en daar heb ik absoluut geen kennis van. Regular Expressions vind ik eng. :p

Martin 23-02-2004 12:48

Citaat:

Enlightenment schreef op 23-02-2004 @ 13:45:
Dan moet je regex goed werken, en daar heb ik absoluut geen kennis van. Regular Expressions vind ik eng. :p
muts :p

Hoe pas jij het dan toe op je website?

Chimera 23-02-2004 12:51

Citaat:

Enlightenment schreef op 23-02-2004 @ 13:45:
Dan moet je regex goed werken, en daar heb ik absoluut geen kennis van. Regular Expressions vind ik eng. :p
Als je een 404 krijgt ligt dat dus absoluut niet aan je REGEXP :rolleyes:

Apache kan die URL niet verwerken omdat hij naar een subdir zoekt. Is een apache-config kwestie dus, misschien op te lossen met een .htaccess ofzo.

Enlightenment 23-02-2004 13:12

Citaat:

Martin schreef op 23-02-2004 @ 13:48:
muts :p

Hoe pas jij het dan toe op je website?

Code:

<VirtualHost *>
    ServerName www.fluffles.net
    DocumentRoot /www/fluffles.net
    ErrorLog /www/logs/fluffles.net-error
    CustomLog /www/logs/fluffles.net-access common
    RewriteEngine on
    RewriteRule ^.*$ /dsm-master.php
</VirtualHost>


Martin 23-02-2004 14:32

Werkt die code ook zo op mijn site? Ik snap er de ballen van. :o

Enlightenment 23-02-2004 14:55

Die code hoort in je httpd.conf van Apache ;)
Indien je daar niet bij kunt kun je het in een .htaccess plaatsen, alhoewel dat wel inefficienter is gezien de technische constructie die daarbij gebruikt wordt. Maar het werkt dan wel.

De regexp rewriterule die ik gebruik, stuurt *ALLE* requests door naar één PHP file, in dit geval dsm-master.php

aan de hand van de URL ($url = $_SERVER['REQUEST_URI']) kun je dan de geschikte node erbij vinden.

Zie ook:
http://forum.scholieren.com/showthre...13#post9110813

Martin 23-04-2004 17:14

Ik krijg dat stomme ding nog steeds niet aan de praat. Wat ik nu wil:

Dit intypen:
http://www.space.nu/films/44/

Dit bestaat niet echt, dus deze url moet ie rewriten naar:
http://www.space.nu/index.php?mid=44

Ik krijg echt niets voor elkaar, hoe gaat het nou wel werken?

Manuzhai 23-04-2004 18:33

Dat moet je ook niet willen. Je moet het PHP script aanpassen om gebruik te maken van de URL die gebruikt werd om het script aan te roepen.

M@rco 24-04-2004 06:43

Je hebt helemaal geen mod_rewrite nodig...

Ik gebruik in een script (nieuwsarchief) dit:

PHP-code:

$url explode("/"$PATH_INFO);
$query mysql_query("
    SELECT *,
    DATE_FORMAT(postdate, '%M %d, %Y at %r') as newsdate
    FROM news WHERE LOWER(DATE_FORMAT(postdate, '%M')) = '
$url[1]'
    AND DATE_FORMAT(postdate, '%Y') = '
$url[2]'
    ORDER BY postdate DESC
"
) or die(mysql_error()); 

De URL luidt dan bijvoorbeeld:
http://www.site.com/archive.php/november/2003

Werkt prima. :)

Scooter B0y 24-04-2004 11:09

waarom RewriteEngine als je net zo makkelijk multiviews kan gebruiken ?

Martin 24-04-2004 12:55

Citaat:

Scooter B0y schreef op 24-04-2004 @ 12:09 :
waarom RewriteEngine als je net zo makkelijk multiviews kan gebruiken ?
hoe werkt dat dan?

Manuzhai 24-04-2004 14:34

MultiViews is dat wat M@rco ook bedoelt. Het komt erop neer dat je path niet ophoudt bij het bestand dat de request moet verwerken, maar dat je daarna gewoon doorgaat. In het script kan je dan die rest van dat path opvragen en aan de hand daarvan actie ondernemen. Als je bovendien de extensie van het bestand weghaalt kunnen mensen niet meer zo makkelijk zien dat je PHP gebruikt hebt.

Martin 24-04-2004 15:47

Citaat:

M@rco schreef op 24-04-2004 @ 07:43 :
Je hebt helemaal geen mod_rewrite nodig...

Ik gebruik in een script (nieuwsarchief) dit:

PHP-code:

$url explode("/"$PATH_INFO);
$query mysql_query("
    SELECT *,
    DATE_FORMAT(postdate, '%M %d, %Y at %r') as newsdate
    FROM news WHERE LOWER(DATE_FORMAT(postdate, '%M')) = '
$url[1]'
    AND DATE_FORMAT(postdate, '%Y') = '
$url[2]'
    ORDER BY postdate DESC
"
) or die(mysql_error()); 

De URL luidt dan bijvoorbeeld:
http://www.site.com/archive.php/november/2003

Werkt prima. :)

hoe heb jij dan je .htaccess opgebouwd?

Enlightenment 25-04-2004 03:50

Citaat:

M@rco schreef op 24-04-2004 @ 07:43 :
Je hebt helemaal geen mod_rewrite nodig...

Ik gebruik in een script (nieuwsarchief) dit:

De URL luidt dan bijvoorbeeld:
http://www.site.com/archive.php/november/2003

Werkt prima. :)

Dat werkt alleen als er wel een vorm van rewrite aanwezig is. Normaliter zal Apache namelijk zoeken in de docroot naar een directory genaamd "archive.php" en daarin de directory "november" en daarin "2003".

Is dit misschien de "Virtual directory" feature?

Manuzhai 25-04-2004 10:01

Citaat:

Enlightenment schreef op 25-04-2004 @ 04:50 :
Dat werkt alleen als er wel een vorm van rewrite aanwezig is. Normaliter zal Apache namelijk zoeken in de docroot naar een directory genaamd "archive.php" en daarin de directory "november" en daarin "2003".
False, 0, onjuist en onwaar.

Dit zou ook al moeten werken met alleen MultiViews aan. Ik ben er nog steeds niet achter hoe het precies zit (heb er zelf ook een paar problemen mee op bepaalde servers), maar je hebt mod_rewrite hier in ieder geval niet voor nodig.

M@rco 25-04-2004 18:00

Citaat:

Martin schreef op 24-04-2004 @ 16:47 :
hoe heb jij dan je .htaccess opgebouwd?
Niet. :)

Martin 25-04-2004 18:31

Citaat:

M@rco schreef op 25-04-2004 @ 19:00 :
Niet. :)
Hoe doe je het dan? :| Ik snap er echt helemaal niets van :|

deathz0rz 25-04-2004 18:36

Citaat:

M@rco schreef op 25-04-2004 @ 19:00 :
Niet. :)
:) :D

Manuzhai 25-04-2004 18:45

Martin, zet dan eens Options All MultiViews in je .htaccess.

Vervolgens kijken wat er gebeurt als je index.php/slaap/ opvraagt.

M@rco 25-04-2004 19:29

Citaat:

Martin schreef op 25-04-2004 @ 19:31 :
Hoe doe je het dan? :| Ik snap er echt helemaal niets van :|
Gewoon, alleen die code die er staat.

Je hebt er niets speciaals voor nodig, alleen Apache; het maakt gebruik van de zogenaamde "Look Back" feature, Zie ook hier:

http://www.sitepoint.com/article/485

deathz0rz 25-04-2004 19:31

Citaat:

Martin schreef op 25-04-2004 @ 19:31 :
Hoe doe je het dan? :| Ik snap er echt helemaal niets van :|
hij doet het natuurlijk met httpd.conf

M@rco 25-04-2004 19:55

Citaat:

deathz0rz schreef op 25-04-2004 @ 20:31 :
hij doet het natuurlijk met httpd.conf
Ik doe niks... httpd.conf kan ik geeneens bij. Dit is gewoon op een shared hosting-server. :)

Martin 25-04-2004 19:59

Citaat:

M@rco schreef op 25-04-2004 @ 20:55 :
Ik doe niks... httpd.conf kan ik geeneens bij. Dit is gewoon op een shared hosting-server. :)
Ik heb het inmiddels ook werkend. Maar is het ook mogelijk om de vermelding "index.php" bijvoorbeeld weg te halen?

M@rco 25-04-2004 20:03

Misschien is dit meer wat je zoekt?

http://www.sitepoint.com/article/sea...riendly-urls/3

Manuzhai 25-04-2004 21:04

Voor het weghalen van de index.php kan je denk ik het best de RewriteRule van Enlightenment gebruiken.

Scooter B0y 26-04-2004 08:56

Code:

Options +MultiViews
pleur dat in je .htaccess (in die map) en je bent klaar

Triloxigen 26-04-2004 10:33

Excuses als het al gezegd is, lang weekend achter de rug..
Maar ondersteund je host dit wel? :)

Martin 26-04-2004 15:20

Citaat:

********** schreef op 26-04-2004 @ 11:33 :
Excuses als het al gezegd is, lang weekend achter de rug..
Maar ondersteund je host dit wel? :)

jup

Enlightenment 01-05-2004 03:13

Citaat:

Manuzhai schreef op 25-04-2004 @ 11:01 :
False, 0, onjuist en onwaar.

Dit zou ook al moeten werken met alleen MultiViews aan. Ik ben er nog steeds niet achter hoe het precies zit (heb er zelf ook een paar problemen mee op bepaalde servers), maar je hebt mod_rewrite hier in ieder geval niet voor nodig.

Ik zei "een vorm van rewrite", waarmee ik dus niet alleen mod_rewrite bedoel. Ook de ingebouwde alias'en in httpd.conf is een vorm van rewrite. /blah vertaalt hij namelijk naar een andere request. Ook jouw MultiViews (ken het zelf niet) zou hieronder vallen, want zonder enige mods zoekt de server doodleuk voor een directory foobar.php. ;)


Alle tijden zijn GMT +1. Het is nu 05:32.

Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.