.htaccess de réécriture d'OBTENIR des variables
J'ai un index.php qui manipulent tout le routage de l'index.le php?page=contrôleur (simplifié) pour séparer la logique de la vue.
Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([\w\d~%.:_\-]+)$ index.php?page=$1 [NC]
Qui, en gros:
http://localhost/index.php?page=controller
Pour
Quelqu'un peut-il m'aider à ajouter de la Réécriture pour
http://localhost/controller/param/value/param/value (Et soforth)
Qui serait:
http://localhost/controller/?param=value¶m=valeur
Je ne peux pas le faire fonctionner avec des règles de réécriture.
Un contrôleur pourrait ressembler à ceci:
<?php
if (isset($_GET['action'])) {
if ($_GET['action'] == 'delete') {
do_Delete_stuff_here();
}
}
?>
Et aussi:
<?php
if (isset($_GET['action']) && isset($_GET['x'])) {
if ($_GET['action'] == 'delete') {
do_Delete_stuff_here();
}
}
?>
- Voir aussi Tout ce que Vous avez Toujours Voulu Savoir sur les Règles de Mod_Rewrite sans jamais oser le Demander?
- Ce que vous voulez faire n'a pas beaucoup de sens à mon humble avis. Je veux dire, en remplacement de & et = n'est pas vraiment beaucoup d'un gain en lisibilité. En outre, il ne vous permettra pas d'utiliser sa valeur de chaînes de requête.
Vous devez vous connecter pour publier un commentaire.
Fondamentalement, ce que les gens essaient de dire, c'est que vous pouvez faire une règle de réécriture de la sorte:
Cela rendra votre fichier php comme ceci:
Et votre réelle adresse URL sera comme ceci:
Et dans votre fichier PHP, vous pouvez accéder à votre params par l'explosion de cette façon:
params
m'a donné'index.php'
). Je l'ai résolu en ajoutant le QSA drapeau, de sorte que, au lieu de simplement[NC]
, j'ai[NC,QSA]
. Aussi, il ressemblait à ceci:index.php?params=params/param/value/param/value
, de sorte qu'il serait ok pour supprimerparams
et il suffit de le garder comme suit:http://url.com/param/value/param/value
.Je pense que c'est mieux si vous rediriger toutes les requêtes de l'index.php fichier puis extraire le nom du contrôleur et les autres paramètres à l'aide de php. De même que tous les autres cadres tels que Zend Framework.
Ici est simple classe qui peut faire ce que vous êtes après.
Comment l'utiliser:
.htaccess:
Votre règle de réécriture serait de passer l'intégralité de l'URL:
Votre index.php interpréter que le chemin d'accès complet de contrôleur/param/valeur/valeur/valeur pour vous (mon PHP est un peu rouillé):
Comment rediriger vers
index.php?params=param/value/param/value
, et laissez php diviser l'ensemble de la$_GET['params']
? Je pense que c'est la façon dont wordpress manipulation.Est-ce cela que vous cherchez?
Cet exemple montre comment facilement masquer les paramètres de chaîne de requête à l'aide de la boucle de drapeau. Supposons que vous avez les URL de http://www.mysite.com/foo.asp?a=A&b=B&c=C et vous souhaitez y avoir accès comme http://www.myhost.com/foo.asp/a/A/b/B/c/C
Essayez la règle suivante pour parvenir à un résultat souhaité:
RewriteRule ^(.*?\.php)/([^/]*)/([^/]*)(/.+)? $1$4?$2=$3 [NC,N,QSA]
Pour une raison quelconque, la solution retenue n'a pas de travail pour moi. Il serait constamment seulement de retour "index.php" comme la valeur des paramètres.
Après quelques essais et erreurs, j'ai trouvé les règles suivantes pour bien travailler. En supposant que vous souhaitez yoursite.com/somewhere/var1/var2/var3 du point de yoursite.com/somewhere/index.php?params=var1/var2/var3 puis placez la règle suivante dans un .htaccess dans le "quelque part" répertoire:
Puis, en PHP ou quelle que soit la langue de votre choix, il suffit de séparer les valeurs à l'aide de la commande explode comme l'a souligné @Wesso.
Des fins de test, cela devrait suffire à votre index.php fichier:
Êtes-vous sûr que vous utilisez le serveur apache.htaccess ne fonctionne que sur le serveur apache. Si vous utilisez IIS web.la config est reqired. Dans ce cas: