2 votes

variables $_GET vides .htaccess réécriture

Étant donné l'URL

https://example.com/api/test/512/31

Je veux réécrire pour :

https://example.com/api/test.php?param1=512&param2=31

J'ai essayé :

RewriteEngine On

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php?param1=$1&param2=$2 [QSA,L]

La réécriture fonctionne mais $1 y $2 sont vides. Savez-vous pourquoi ?

2voto

MrWhite Points 11269
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php?param1=$1&param2=$2 [QSA,L]

Comment pensez-vous $1 y $2 sont réglés ? Vous n'avez pas créé de groupes de capture dans l'application RewriteRule motif (qui est un motif négationné et ne peut donc pas "correspondre" à quoi que ce soit de toute façon), donc la fonction $1 y $2 références arrière sera en effet toujours vide.

Puisque vous utilisez des URL sans extension qui correspondent directement à des fichiers, vous devez également vous assurer que MultiViews est désactivé (si ce n'est pas déjà le cas). Si MultiViews est activé, vous obtiendrez le même résultat - aucun paramètre d'URL - puisque mod_negotiation aurait émis une sous-demande interne pour le fichier avant mod_rewrite.

UPDATE :

Critères (à partir des commentaires) :

  • Votre .htaccess se trouve dans le dossier /api sous-répertoire.
  • /api/<something> correspond toujours à /api/<something>.php . <something> peut être constitué d'un nombre arbitraire de segments de chemin, par ex. different/anothersubfolder/filename .
  • Le site /512/31 Les segments de chemin d'accès à la fin de l'URL peuvent être constitués de chiffres et de lettres. Il y a toujours deux segments de chemin, c'est-à-dire. /#1/#2 .

Essayez plutôt ce qui suit :

Options -MultiViews

RewriteEngine On

RewriteCond %{DOCUMENT_ROOT}/api/$1.php -f
RewriteRule ^(.+)/(\w+)/(\w+)$ $1.php?param1=$2&param2=$3 [QSA,L]

La classe de caractères abrégés \w correspond à a-z , A-Z , 0-9 y _ (soulignement). Cela couvre donc les "chiffres et les lettres".

0 votes

Quelques informations supplémentaires que j'aurais dû mettre dans la question : Mon htaccess se trouve 1 répertoire en dessous de ma racine www (j'ai un htaccess différent dans la racine que je ne veux pas utiliser pour ce sous-dossier).

0 votes

Je souhaite pouvoir passer des nombres et des chaînes de caractères en tant que paramètres.

0 votes

De plus, je veux que ce htaccess fonctionne même lorsque l'on descend dans plusieurs répertoires. Par exemple avec l'URL : exemple.com/api/different/autre sous-dossier/nom de fichier/512/31

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X