RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php?param1=$1¶m2=$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¶m2=$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".