J'ai une URL qui ressemble à:
url.com/picture.php?id=51
Comment convertirais-je cette URL en:
picture.php/Some-text-goes-here/51
Je pense que WordPress fait de même.
Comment créer des URL conviviales en PHP?
php
.htaccess
url
mod-rewrite
url-rewriting
Jazerix
la source
la source
mod_rewrite
est tout ce dont vous avez besoin pour cela et il y a beaucoup de questions à ce sujet ici sur SO. Et si vous «pensez» que wordpress fait la même chose, pourquoi ne pas le chercher simplement ? ;)Réponses:
Vous pouvez essentiellement le faire de 2 façons:
La route .htaccess avec mod_rewrite
Ajoutez un fichier appelé
.htaccess
dans votre dossier racine et ajoutez quelque chose comme ceci:Cela dira à Apache d'activer mod_rewrite pour ce dossier, et s'il lui est demandé une URL correspondant à l'expression régulière, il la réécrit en interne à ce que vous voulez, sans que l'utilisateur final ne le voie. Facile, mais inflexible, donc si vous avez besoin de plus de puissance:
La route PHP
Mettez plutôt ce qui suit dans votre .htaccess: (notez la barre oblique)
Cela lui dira d'exécuter votre
index.php
pour tous les fichiers qu'il ne peut normalement pas trouver sur votre site. Dans là, vous pouvez alors par exemple:C'est ainsi que font les grands sites et les systèmes CMS, car cela permet beaucoup plus de flexibilité dans l'analyse des URL, des URL dépendantes de la configuration et de la base de données, etc. Pour une utilisation sporadique, les règles de réécriture codées en dur fonctionneront
.htaccess
bien.la source
picture.php/invalid-text/51
redirigerait également vers le même endroit. Vous pouvez également ajouter une vérification pour voir si la chaîne est correcte et sinon, rediriger à nouveau vers l'emplacement correct. C'est ainsi que je l'ai fait sur l'un de mes sites en utilisant htaccess./blog/25
ainsi que/picture/51
et/download/684
. En outre, cela est considéré comme une très mauvaise pratique (et vous pénalisera Google PR!) Si toutes les URL générées aléatoirement ne renvoient pas correctement 404.FallbackResource /index.php
(notez la barre oblique principale)FallbackResource
ne démarre que pour les fichiers qui n'existent pas réellement sur le système de fichiers, d'où le repli . Donc, si vous avez un fichier/static/styles.css
et que vous vous y référez,http://mydomain.tld/static/styles.css
le code n'est jamais exécuté, ce qui le fait fonctionner comme prévu et prévu de manière transparente.if($elements[0] === NULL)
place, car$elements
cela retournera toujours un compte de un, même s'il est vide.Si vous souhaitez uniquement modifier l'itinéraire pour
picture.php
ajouter une règle de réécriture, cela.htaccess
répondra à vos besoins, mais si vous voulez la réécriture d'URL comme dans Wordpress, PHP est le chemin. Voici un exemple simple pour commencer.Structure des dossiers
Il y a deux fichiers nécessaires dans le dossier racine
.htaccess
etindex.php
, et il serait bon de placer le reste des.php
fichiers dans un dossier séparé, commeinc/
..htaccess
Ce fichier a quatre directives:
RewriteEngine
- activer le moteur de réécritureRewriteRule
- refuser l'accès à tous les fichiers duinc/
dossier, rediriger tout appel vers ce dossier versindex.php
RewriteCond
- permettre un accès direct à tous les autres fichiers (comme les images, css ou scripts)RewriteRule
- rediriger n'importe quoi d'autre versindex.php
index.php
Puisque tout est maintenant redirigé vers index.php, il sera déterminé si l'url est correcte, tous les paramètres sont présents et si le type de paramètres est correct.
Pour tester l'url, nous avons besoin d'un ensemble de règles, et le meilleur outil pour cela est une expression régulière. En utilisant des expressions régulières, nous tuerons deux mouches d'un seul coup. Url, pour réussir ce test doit avoir tous les paramètres requis qui sont testés sur les caractères autorisés. Voici quelques exemples de règles.
La prochaine étape consiste à préparer la requête uri.
Maintenant que nous avons la requête uri, la dernière étape consiste à tester uri sur les règles des expressions régulières.
Une correspondance réussie, puisque nous utilisons des sous-modèles nommés dans regex, remplira le
$params
tableau presque de la même manière que PHP remplit le$_GET
tableau. Cependant, lors de l'utilisation d'une URL dynamique, le$_GET
tableau est rempli sans aucune vérification des paramètres.Ces quelques lignes de code et une connaissance de base des expressions régulières suffisent pour commencer à construire un système de routage solide.
Source complète
la source
c'est un fichier .htaccess qui transmet presque tout à index.php
alors c'est à vous d'analyser $ _SERVER ["REQUEST_URI"] et de vous diriger vers picture.php ou autre
la source
FallbackResource
directive il y a quelques versions majeures, qui est désormais le moyen préféré d'implémenter ce comportement à un coût de performance inférieur car il n'a pas besoin de lancer tout le moteur de réécriture. Documentation ici . Vos règles sont également imparfaites car vous ne référencez pas les répertoires (!-d
) et tous les filtres d'extension sont obsolètes - ils-f
devraient déjà les attraper.PHP n'est pas ce que vous recherchez, consultez mod_rewrite
la source
Bien que déjà répondu, et l'intention de l'auteur est de créer une application de type contrôleur frontal, mais je publie une règle littérale pour le problème posé. si quelqu'un a le problème pour le même.
Ci-dessus devrait fonctionner pour l'URL
picture.php/Some-text-goes-here/51
. sans utiliser index.php comme application de redirection.la source