login  Naam:   Wachtwoord: 
Registreer je!
 Forum

.htaccess AND mod_rewrite()

Offline SilVeX - 16/12/2007 15:54 (laatste wijziging 16/12/2007 21:54)
Avatar van SilVeXHTML beginner Ik ben een nieuw project begonnen (puur om te leren) en nu wil ik het meteen helemaal goed doen. Ik heb het script nu af en wil nu vriendelijke url's maken.

Ik heb nu deze .htaccess:
  1. RewriteEngine On
  2. RewriteRule ^index/(.*)/ index.php?pa=$1

(ik weet niet of deze goed is)

Hoe moet ik nu verdergaan? Ik gebruik dit include scriptje:
  1. <?
  2. include "paginas.php";
  3. if(isset($_GET['pa']) && $_GET['pa'] != "home"){
  4. if(in_Array($_GET['pa'], $aPagina)) {
  5. $pagina = $_GET['pa'];
  6. } else {
  7. $pagina = "errors/404";
  8. }
  9. } else {
  10. $pagina = "home";
  11. }
  12. if (file_exists($pagina.'.php')){
  13. include $pagina.".php";
  14. } else {
  15. include $pagina.".html";
  16. }
  17. ?>


Kan iemand mij vertellen hoe ik nu verder moet gaan en of dit goed is wat ik hierboven heb staan?

14 antwoorden

Gesponsorde links
Offline Bart - 16/12/2007 16:20
Avatar van Bart PHP expert Ah de MultiViews 
Je kan ook dit gebruiken: (dit op de plek zetten waar de content van die pagina moet komen)
  1. <?php
  2. if (!isset($aUrl[1]))
  3. {
  4. header("Location: ".$path);
  5. }
  6. elseif (isset($aUrl[2]))
  7. {
  8. if (file_exists($aConfig['dir']['pagemap'].'/'.$aUrl[2].'.php'))
  9. {
  10. include $aConfig['dir']['pagemap'].'/'.$aUrl[2].'.php';
  11. }
  12. else
  13. {
  14. include $aConfig['dir']['pagemap'].'/error.php';
  15. }
  16. }
  17. ?>

En dit in een eventuele config file:
  1. <?php
  2. // multiviews settings
  3. $aConfig['dir']['path'] = "http://site.com/forum/"; // de url naar de site
  4. $aConfig['dir']['pagemap'] = "/opt/lampp/htdocs/forum"; // pad naar de files
  5. $aConfig['dir']['int'] = 0; // de map waar in dit script staat, als het in de root is 0, /map1/ = 1, /map1/map2/ = 2 etc.
  6. ?>

Dit script is trouwens afkomstig van SiMa (onder handige php scripts) Ik dacht ik vermeld het ff. Straks krijgen we gesodemieter dat ik met de eer ga strijken. 
Maar dit script gerbruik ik en het werkt prima 
Offline SilVeX - 16/12/2007 21:18 (laatste wijziging 16/12/2007 22:25)
Avatar van SilVeX HTML beginner Ik heb nu het script van quicky toegepast, maar als ik dan deze url gebruik:
http://www.mijnsite.nl/home/
dan opent hij gewoon de pagina home.php (maar niet in de pagina waar hij geinclude moet worden).

Hoe kan ik dit dan oplossen ik heb deze settings:
  1. <?
  2. // multiviews settings
  3. $aConfig['dir']['path'] = "http://www.mijnsite.nl/"; // de url naar de site
  4. $aConfig['dir']['pagemap'] = "/"; // pad naar de files
  5. $aConfig['dir']['int'] = 0; // de map waar in dit script staat, als het in de root is 0, /map1/ = 1, /map1/map2/ = 2 etc.
  6. ?>


edit nu moet ik denk ik een andere htaccess hebben of is dat niet zo?
Offline Bart - 16/12/2007 22:38 (laatste wijziging 16/12/2007 22:39)
Avatar van Bart PHP expert doe eens
  1. <?php
  2. echo $_SERVER['PATH_INFO'];
  3. ?>

En plaats deze file in de plaats waar je index van je website staat.
Wat geeft ie weer?
(Je $aConfig['dir']['pagemap'] is waarschijnlijk niet goed ingesteld)
Offline SilVeX - 17/12/2007 09:45
Avatar van SilVeX HTML beginner Dan geeft hij niks. . .
Maar al wil ik www.mijnsite.nl/home/ openen dan zegt hij dat mijn path /home/ is.

Is mijn .htaccess wel goed dan?
Offline Bart - 17/12/2007 11:00
Avatar van Bart PHP expert Beste SilVeX, ik heb nu sinds kort ook hetzelfde probleem, mijn eigen navigatie systeem werkt niet meer. Dit komt omdat ik het nu doe via een webhost. Ik heb een beetje gegoogled hier en daar en ben tot de ontdekking gekomen dat het nogal omslachtig is om mijn script te gebruiken. Daarom heb ik me verdiept in mod_rewrite. Dit was zeer eenvoudig en makkelijker dan ik zelf gedacht had.
Dit is hoe ik het heb gedaan:
  1. RewriteEngine On
  2. RewriteRule ^index/(.*)/ index.php?p=$1
  3. RewriteRule ^index/(.*) index.php?p=$1

Uitleg:
De eerste regel spreekt voor zich neem ik aan.
De tweede en derde regel zijn in principe hetzelfde, maar dat leg ik straks uit.
De tweede regel zegt dat het om een 'herschrijf-regel' gaat.
Als http://www.mijnsite.com/index/reg wordt aangeropen gaat ie intern aan de slag, hij plakt het stukje achter de index in $1.

De derde regel is bijna gelijk zou je zeggen, dat is ie ook wel, alleen die "/" die er niet staat zorgt ervoor dat je niet afhankelijk bent van een "/" op het uiteinde van je URL.

Oke dat was de .htaccess. Die je overigens in de root map moet stoppen van je site. Denk hierbij aan waar je index pagina staat, daar moet de .htaccess-file ook komen te staan.

Nu de php-code:
Op de index.php waar je waarschijnlijk je content van de pagina's wilt includen zet je deze code neer: (dit is overigens een eigen geschreven versie en kan naar smaak worden aangepast)
  1. <?php
  2. if($_GET['p'] == '')
  3. {
  4. include('home.php');
  5. }
  6. else
  7. {
  8. if(file_exists($_GET['p'].".php"))
  9. {
  10. include($_GET['p'].".php");
  11. }
  12. else
  13. {
  14. include("error.php");
  15. }
  16. }
  17. ?>

Dit is een zeer eenvoudig navigatie-systeempje.
Eerst wordt gekeken of de variabele $_GET['p'] leeg is,
indien dit het geval is, include home.php (of een andere file die je wenst als beginpagina).
Als $_GET['p'] NIET leeg is, gaat ie kijken of de aangeropen pagina bestaat PHP.net: (file_exists).
Als dit het geval is include de $_GET['p'] + de extensie .php erachter. Als de pagina niet bestaat, include je je eigen 404 pagina.
(In mijn geval error.php).

En nu als laatste: de links.
De links op je site worden nu als volgt:
http://www.mijnsite.com/index/reg/
http://www.mijnsite.com/index/home/
http://www.mijnsite.com/index/login/
etc.
Intern veranderd php de links naar:
http://www.mijnsite.com/index.php?p=reg
http://www.mijnsite.com/index.php?p=home
http://www.mijnsite.com/index.php?p=login

Maar extern (wat voor de gebruiker te zien is) worden het nette URLS. En dit komt je pagina's ook nog ten goede met Google.
Offline SilVeX - 17/12/2007 11:19
Avatar van SilVeX HTML beginner @Quicky, dankje voor de duidelijke uitleg. Echter werkt het bij mij niet  

Dit is mijn .htaccess:
  1. RewriteEngine On
  2. RewriteRule ^index/(.*)/ index.php?pa=$1
  3. RewriteRule ^index/(.*) index.php?pa=$1


En dit is mijn include:
  1. <?php
  2. if($_GET['pa'] == '')
  3. {
  4. include('home.php');
  5. }
  6. else
  7. {
  8. if(file_exists($_GET['pa'].".php"))
  9. {
  10. include($_GET['pa'].".php");
  11. }
  12. else
  13. {
  14. include("error.php");
  15. }
  16. }
  17. ?>


En dit is een link:
<a href="index.php?pa=login" class="menu" title="Login">Login</a>
Offline Bart - 17/12/2007 11:23
Avatar van Bart PHP expert
Offline SilVeX - 17/12/2007 11:27 (laatste wijziging 17/12/2007 13:23)
Avatar van SilVeX HTML beginner Sorry, ik heb plaatste de verkeerde link. Alleen nu werkt het nogsteeds niet. Hij include de opgegeven pagina niet  
Hij blijft de heletijd op home.php staan

Ik heb nu bovenaan me pagina:
  1. <?php
  2. echo $_GET['pa'];
  3. ?>


En als mijn url dan www.mijnsite.nl/index/login/ is dan print hij niet "login" op mijn scherm. Dus ik denk dat het aan mijn .htaccess ligt. Iemand die het probleem ziet?
  1. RewriteEngine On
  2. RewriteRule ^index/(.*)/ index.php?pa=$1
  3. RewriteRule ^index/(.*) index.php?pa=$1
Offline Bart - 17/12/2007 13:27
Avatar van Bart PHP expert Waar heb je je .htaccess file staan?
Offline SilVeX - 17/12/2007 13:35 (laatste wijziging 17/12/2007 13:37)
Avatar van SilVeX HTML beginner in de root map van mijn game. . .

EDIT:
Dit is mijn site:
http://www.k-simply.nl
daar opent hij gewoon home.php
maar als ik [url]http://www.k-simply.nl/index/signup/[/url] probeer te openen dan opent hij ook home.php bij de include en als ik $_GET['pa'] echo is die leeg. 
Offline Giant - 17/12/2007 15:51 (laatste wijziging 17/12/2007 15:52)
Avatar van Giant PHP beginner probeer het eens met iets anders dan index/... kan aan index liggen
dit probleem overkwam mij eerst ook...
ook zal je je layout als full path moeten includen:P dus vanaf de root gezien (met een / ervoor dus) anders werkt hij niet omdat browsers het als directory's zien
Offline SilVeX - 17/12/2007 16:41 (laatste wijziging 17/12/2007 21:02)
Avatar van SilVeX HTML beginner Ik heb nu inplaats van index.php --> online-spel.php
En waar ik achter kwam is:
http://www.k-simply.nl/online-spel/signup/?pa=help
Dat werkt dan weer wel :S
.htaccess
  1. RewriteEngine On
  2. RewriteRule ^online-spel/(.*)/ online-spel.php?pa=$1
  3. RewriteRule ^online-spel/(.*) online-spel.php?pa=$1


Heeft misschien iemand een andere .htaccess voor mij? gewoon om te kijken of het op een andere manier wel lukt?
Offline Giant - 17/12/2007 21:45
Avatar van Giant PHP beginner
  1. Options +FollowSymLinks
  2. RewriteEngine On
  3. RewriteBase /
  4. RewriteRule ^page/(.*)/ index.php?url=$1
  5. RewriteRule ^page/(.*) index.php?url=$1

zo heb ik hem:)
werkt perfect:D
Offline SilVeX - 17/12/2007 22:21 (laatste wijziging 18/12/2007 23:27)
Avatar van SilVeX HTML beginner Is er een manier om te testen of me RewriteEngine het wel doet?

mijn hele .htaccess doet het niet dus moet eerst zien te zorgen dat hij het wel gaat doen 

Ik heb zojuist mijn script geinstalleerd op een andere host. Alleen daar probeerde hij files uit een hele andere directory te halen  

Iemand enig idee waaraan dat ligt?
/home/virtual/site85/fst/var/subdomain/kris/html/index.php
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.442s