URL Rewriting à l'aide d'apache

L’auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Salutations,

Je suis en train de développer une petite application web, et j’aimerai intégrer de l’URL Rewriting. Ne m’étant pas tellement intéressé à la configuration d’Apache et au "comment ça marche" du .htaccess, je me trouve maintenant bloqué sur un petit problème.

En effet, mon application utilise une connexion via OpenID. Les pages de mon application sont affichées via la même page, index.php, avec un code qui ressemble grosso modo à ça :

if (!isset($_SESSION['steamid']) && (($_GET["action"] != 'signin' && $_GET["action"] != 'login'))) {
    
    header("Location: signin"); /* rewriting url */
} elseif(!isset($_SESSION['steamid'])) {
    $page = 'signIn';
} else {
    require("vendors/steamauth/userInfo.php");
    $page = 'chat';
}

Pour le côté URL Rewriting, lorsque l’utilisateur va se retrouver sur {mon_url]/signin, ça va en fait lui afficher la page index.php?action=signin

Options +FollowSymlinks
RewriteEngine on

#-------------------#
#   Rewrite rules   #
#-------------------#
# Rewriting user-friendly urls to specific actions
# e.g /control will be redirected to index.php?action=control
RewriteRule ^([a-z]+)$ index.php?action=$1 [L]

Le problème, c’est lorsque OpenID redirige vers ma page de traitement des informations reçu par ce dernier. J’obtiens une URL du type /login/openid{paramètres openid}

Le truc, c’est que j’aimerai bien faire en sorte, que lorsque j’ai une URL de ce type :

{mon_site}/argument1/argument2/argument3/.../argumentn

ça redirige vers :

index.php?argument1={valeur}&argument2={valeur}....&argumentn={valeur}

Pensez-vous que ceci est possible à réaliser avec PHP et les configurations d’Apache ?

Merci énormément par avance, Gabyfle.

+0 -0

Cette réponse a aidé l’auteur du sujet

Ceci devrait faire l’affaire :

RewriteRule ^/(\w+)/(\w+)/(\w+)/?$ index.php?arg1=$1&arg2=$2&arg3=$3 [L]

Tu devrais regarder les tutos sur les regex, c’est un outil indispensable notamment pour la vérification de champ d’un formulaire. ;)

Ensuite tu as des classes php (router) qui pourrait t’épargner ce travail.

NB : Options +FollowSymlinks n’est pas toujours souhaité. ;)

✈️ // 🐺 Ami des loups // 🎮 Coding Game // 🐤 Twitter @A312_zds // L’hiver vient // @**A-312** pour me ping

+1 -0
Auteur du sujet

Ceci devrait faire l’affaire :

RewriteRule ^/(\w+)/(\w+)/(\w+)/?$ index.php?arg1=$1&arg2=$2&arg3=$3 [L]

Tu devrais regarder les tutos sur les regex, c’est un outil indispensable notamment pour la vérification de champ d’un formulaire. ;)

Ensuite tu as des classes php (router) qui pourrait t’épargner ce travail.

NB : Options +FollowSymlinks n’est pas toujours souhaité. ;)

A-312

Salutations, Merci pour ta réponse, néanmoins, je tombe sur des erreurs 404 lorsque j’essaie d’accéder à /signin par exemple. De plus, d’une façon générale, chaque url tel que {mon_site}/arg renvoie à une erreur 404…

Une idée ?

Merci par avance, Gabyfle

+0 -0
Auteur du sujet

Non, j’ai une page index.php, qui attends normalement les arguments reçus en $_GET. Dans mon premier message, tu peux voir comment je contrôle l’URL de la page en utilisant une simple redirection :

if (!isset($_SESSION['steamid']) && (($_GET["action"] != 'signin' && $_GET["action"] != 'login'))) {
    
    header("Location: signin"); /* rewriting url */
#code

L’idée de la redirection était de faire arriver l’utilisateur sur la page index.php?action=signin lorsqu’il se trouve à l’URL /signin, et sur index.php?action=signin&{tous les arguments openid} lorsqu’il se trouve sur /signin/{tous les arguments openid}

Merci pour tes réponses, Gabyfle.

+0 -0

Il faut prévoir le nombre d’argument :

RewriteRule ^/(\w+)/?$ index.php?arg1=$1&arg2=$2 [L]
RewriteRule ^/(\w+)/(\w+)/?$ index.php?arg1=$1&arg2=$2 [L]
RewriteRule ^/(\w+)/(\w+)/(\w+)/?$ index.php?arg1=$1&arg2=$2&arg3=$3 [L]

Sinon, en s’inspirant de Symfony avec un rooter en php :

Options -Indexes
AddDefaultCharset UTF-8

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]

Puis ensuite tu fait un str_split sur : $_SERVER["REQUEST_URI"]

✈️ // 🐺 Ami des loups // 🎮 Coding Game // 🐤 Twitter @A312_zds // L’hiver vient // @**A-312** pour me ping

+0 -0
Auteur du sujet

Merci pour ta réponse ! Néanmoins, je ne suis pas sûr de comprendre ces deux lignes :

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]

Quelle est la signification de !-f ?

Merci énormément, Gabyfle

+0 -0

Cette réponse a aidé l’auteur du sujet

RewriteRule va être exécuté seulement si RewriteCond est vrai.

Avec -f va vérifier si %{REQUEST_FILENAME} est un fichier et va retourner vrai ou faux. Le point d’exclamation signifie "non"/"pas" donc on inverse la condition.

Donc avec %{REQUEST_FILENAME} !-f, on va réaliser RewriteRule seulement si ton URL n’est pas un fichier existant.

Le flag QSA permet de passer des arguments GET dans l’url. Le flag L signifique qu’on s’arrête à cette règle.

Édité par A-312

✈️ // 🐺 Ami des loups // 🎮 Coding Game // 🐤 Twitter @A312_zds // L’hiver vient // @**A-312** pour me ping

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte