RewriteRule werkt bij de ene php?sub= wel en bij de ander niet.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

J L

J L

02/10/2013 12:12:01
Quote Anchor link
Opeens loop ik tegen dit rare probleem op. De RewriteRules hebben altijd gewerkt, maar opeens wil de pagina niet meer laden bij 1 subfolder en bij de ander weer wel. Terwijl de settings hetzelfde zijn.

Ik heb al een hoop geprobeerd, maar ik kom er niet uit.

Pagina website.nl/about/ werkt niet meer, maar wel via website.nl/about/index en beide werkten altijd wel met de huidige htaccess settings en nu niet meer.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
// Header
require_once('include/header.php');
// Pagina's inladen
$sub = strtolower($_GET['sub']);
//
if(strlen($sub) > 0){
    if(file_exists('about/'.$sub.'.php')){
        include('about/'.$sub.'.php');
    }

        else{
            echo "<h1 class=\"titel\">Page not found.</h1>";
            echo "<p>The page doesn't exist or hasn't been found.</p>";
        }
    }

    else{
        include('about/index.php');
    }

// Footer
require_once('include/footer.php');
?>


// Htaccess settings
RewriteRule ^about/$ about.php [L]
RewriteRule ^about/([A-Za-z0-9-]+)$ about.php?sub=$1 [L]


Pagina die wel werkt via de url website.nl/contact/ en ook via website.nl/contact/index
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
// Header
require_once('include/header.php');
// Pagina's inladen
$sub = strtolower($_GET['sub']);
//
if(strlen($sub) > 0){
    if(file_exists('contact/'.$sub.'.php')){
        include('contact/'.$sub.'.php');
    }

        else{
            echo "<h1 class=\"titel\">Page not found.</h1>";
            echo "<p>The page doesn't exist or hasn't been found.</p>";
        }
    }

    else{
        include('contact/index.php');
    }

// Footer
require_once('include/footer.php');
?>


// Htaccess settings
RewriteRule ^contact/$ contact.php [L]
RewriteRule ^contact/([a-zA-Z]+)$ contact.php?sub=$1 [L]


De overige subpagina's, welke aangeduid worden zoals website.nl/about/me & website.nl/about/you enz. werken wel naar wens, maar ik krijg de url niet meer werkend zonder een toevoeging achter de folder about: website.nl/about/ en om nou in de url index erachter te zetten staat niet mooi. Heeft iemand een idee? Ik vind het erg raar dat bij de ene folder het gewoon werkt naar wens en bij de ander niet, daarom kan ik het ook niet verklaren.
Gewijzigd op 02/10/2013 12:49:28 door J L
 
PHP hulp

PHP hulp

25/11/2024 00:34:36
 
Kris Peeters

Kris Peeters

02/10/2013 14:58:05
Quote Anchor link
Ik ga niet rechtstreeks antwoorden, maar ...

Zie hier eens naar
http://www.phphulp.nl/php/tutorial/overig/url-vriendelijkheid-seo/691/van-n-naar-oneindig/1811/

Het systeem dat daar is opgezet, is het volgende: alles wordt naar 1 $_GET vertaald. Dus slechts 1 of twee lijnen redirect.

bv. op pagina
mijnsite.com/agenda/15/edit/
-> dit wordt vertaald naar
index.php?p=agenda/15/edit/
ofwel
$_GET['p'] = 'agenda/15/edit/';

Met een explode op karakter '/' krijg je dus een array aan gegevens. En dan is het aan jou om die structuur zinnig te maken.

bv in dit geval:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
// $_GET['p'] =  'agenda/15/edit/';
$get = explode('/',  $_GET['p']);
// $get[0] = de pagina, hier dus 'agenda'
// $get[1] is de id van het agenda item
// $get[2] is 'edit', wat betekent dat op het formulier staan om een content node (een agenda item) aan te passen als moderator of auteur van de node.

?>


Het resultaat is dat die .htaccess maar 1 keer moet worden geschreven; altijd zal werken, voor gelijk welke situatie.
Jij moet gewoon in je php-logica een consistent systeem hebben.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.