Bonjour,
Je suis débutant en php et je n'avais pas encore vu l'url rewriting.
J'ai suivis la vidéo de grafikart mais là je sèche car ma réécriture fonctionne en local mais pas en distant.
Ci-dessous l'arborescence de mon site :

index.php
Un dossier : "pages_php" où se trouvent toutes mes pages incluses dans mon index .
Un dossier : "clients" où se trouve le détail du client (info, photo..etc) sous forme d'une section :

<div class="container">
    <div class="row">
        <div class="bloc-title">
            <h1>~ Réalisations Diverses ~</h1>
            <h2>Ci-dessous des créations pour des demandes ponctuelles.</h2>
        </div>
        <div class="customer-description">
            <p>Ami(e)s, proches ou encore famille.</p>
            <p>blablabla... </p>
        </div>
</div>

Ci-dessous ma règle de réécriture du htaccess placé à la racine du site.

RewriteRule ^clients/([0-9a-zA-Z\_]+)$  pages_php/clients.php?cust=$1 [NC,L]

Depuis mon index, j'ai des liens qui pointent vers une page "client.php" qui se trouve dans le dossier 'pages_php".
Je vais donc charger dynamiquement le nom du client : Exemple, je vais cliquer sur "client_toto" depuis mon index :
Avant d'essayer l'url rewriting, mes liens étaient comme ça:

<a href="pages_php/clients.php?cust=kchampa">Client_toto</a>

avec ma règle de réécriture :

<a href="clients/kchampa">Client_toto</a>

Ce qui va m'envoyer sur ma page "client.php" qui traitera le nom de client comme ceci:

<?php
$customer = '';
$dir = '../clients/';
$file_list = scandir($dir);
$file_list_clean = array_slice($file_list, 2);
if (isset($_REQUEST['cust']) && $_REQUEST['cust'] != '' ){
    $customer = $_REQUEST['cust'].'.php';
    if (in_array($customer,$file_list_clean )){
        $customer_ok = $customer;
        $customer_include = $dir.$customer_ok;
    }else{
        header('Location: http://localhost/monsite/pages_php/erreur404.php');
    }   
}else{
    header('Location: http://localhost/monsite/pages_php/erreur404.php');
}
?>

<!DOCTYPE html>
<html lang="fr" class="nojs">
    <?php require_once("../pages_php/head_dist.php") ?>

    <body data-spy="scroll" data-target="#my-nav" data-offset="120">
        <!-- pre loder -->
        <!--<div id="preloader">
<div id="status">&nbsp;</div><!-- /status -->
        <!--</div>-->
        <?php require_once("../pages_php/navbar_dist.php") ?>

        <section id="clients">
            <?php require_once($customer_include) ?>
        </section>
        <?php require_once("../pages_php/footer_dist.php") ?>
    </body>
</html>

Mis à part mes chemins en relatif qu'il faudra que je change pour le distant, le soucis est que le

<?php require_once($customer_include) ?>

charge la page "client_toto.php" du dossier client (qui n'est q'une section en html sans head, body..etc) et pas du tout la page "client.php" incluant ma section.

Et là, je sèche car l'include fonctionne bien en local !
Merci d'avance pour vos com
Jack

2 réponses


à première vue je ne vois pas d'erreur (si tu modifies bien tes header en distant...)
la question serait :
quand est-ce que ça coince ?
est-ce au moment du rewrite : ton url ne s'affiche pas correctement ?
ou
c au moment de l'include que ça ne fonctionne pas ?

Hello Saibe,
Parfois je me hais !!!
j'avais une autre règle de réécriture que j'avais testé et pas commenté ! je viens de la commenter et tester en distant et tout fonctionne !!! alors je ne comprends pas pourquoi malgré cette règle non commentée, ça fonctionnait en local !!!

#RewriteRule ^([0-9a-zA-Z\-\#])$  index.php$1 [NC,L]
RewriteRule ^clients/([0-9a-zA-Z\_]+)$  pages_php/clients.php?cust=$1 [NC,L]

Merci pour ton intervention !!