Bonjour,
J'ai un soucis de redirection.
J'ai un dossier /asn/, il contient, entre autre...
/config
/public
...
Dans public, j'ai un fichier .htaccess
Je lance mon serveur à partir du repertoire /ans/, avec la ligne de commande : php -S localhost:8000 -t public/
dans mon fichier .htaccess, j'ai
<IfModule mod_rewrite.c>
RewriteEngine On
# RewriteBase /
#si ce n'est pas un répertoire
RewriteCond %{REQUEST_FILENAME} !-d
# Si ce n'est pas un fichier
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ index.php?url=$1 [L]
</IfModule>
Lorsque je tente de lancer ma page web dans mon navigateur, avec (par exemple) cette url http://localhost:8000/controllerName/method/u/4
Je pensais récupérer dans $_GET (controllerName/method/u/4)
Malheureusement, je ne sais pas pourquoi, mon $_GET est vide.
asn/public/index.php
<?php
include "../system/init.php";
asn/system/init.php
<?php
spl_autoload_register(function($className){
include "classes/$className.php";
});
$rout = new rout;
?>
asn/system/classes/rout.php
<?php
class rout {
public function __construct()
{
echo 'Classe rout...';
var_dump($_GET);
if(isset($_GET['url'])){
print_r($_GET['url']);
}
}
}
?>
Sur ma page web, j'ai : Classe rout...array(0) { }
Donc, j'arrive bien sur la page, mais la variable $_GET est vide.
Merci pour votre aide.
Bonjour,
Le souci semble venir du fait que le serveur PHP intégré (lancé avec php -S) n'interprète pas les règles définies dans le fichier .htaccess, car il ne gère pas les directives Apache.
Pour contourner ce problème, tu peux utiliser un routeur PHP personnalisé afin de rediriger les requêtes vers ton fichier index.php. Par exemple, crée un fichier router.php contenant :
<?php
// Si la requête concerne un fichier statique (images, CSS, JS, etc.), laisse le serveur le gérer
if (preg_match('/\.(?:png|jpg|jpeg|gif|css|js)$/', $_SERVER["REQUEST_URI"])) {
return false;
}
// Sinon, redirige vers index.php pour gérer la réécriture
require_once 'index.php';
?>
Lance ensuite le serveur avec la commande suivante :
php -S localhost:8000 router.php
Cette approche permet d'intercepter les requêtes et de rediriger celles qui ne correspondent pas à un fichier existant vers ton index.php, où tu pourras traiter la variable $_GET['url'] comme prévu.
Bonne continuation et bon codage !