Im vraiment vraiment un débutant en regexp et je ne peux pas comprendre comment faire cela.Apache RewriteRule: est-il possible de 'détecter' le premier et le second segment de chemin?
Mon but est d'avoir le RewriteRule
de « tranche » le chemin d'URL de la requête en 3 parties:
example.com/foo
#should return: index.php?a=foo&b=&c=
example.com/foo/bar
#should return: index.php?a=foo&b=bar&c=
example.com/foo/bar/baz
#should return: index.php?a=foo&b=bar&c=baz
example.com/foo/bar/baz/bee
#should return: index.php?a=foo&b=bar&c=baz/bee
example.com/foo/bar/baz/bee/apple
#should return: index.php?a=foo&b=bar&c=baz/bee/apple
example.com/foo/bar/baz/bee/apple/and/whatever/else/no/limit/in/those/extra/parameters
#should return: index.php?a=foo&b=bar&c=baz/bee/apple/and/whatever/else/no/limit/in/those/extra/parameters
En bref, le premier segment dans le chemin d'URL (foo
) doit être donné à un , le deuxième segment (bar
) à b, et le reste de la chaîne dans c
I wroted celui-ci
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(([a-z0-9/]))?(([a-z0-9/]+))?(([a-z0-9]+))(.*)$ index.php?a=$1&b=$2&c=$3 [L,QSA]
</IfModule>
Mais évidemment ne fonctionne pas, et je ne sais même pas si ce que je veux est possible.
Une suggestion?
EDIT: Après avoir joué avec le directeur de l'entraîneur, je suis celui travaillant aussi:
RewriteRule ^([^/]*)?/?([^/]*)?/?(.*)?$ index.php?a=$1&b=$2&c=$3 [L,QSA]
pourquoi la downvote? Si ma solution est incorrecte, veuillez avoir la courtoisie de me dire pourquoi. Il semble faire le travail, comme je l'ai expliqué dans ma réponse, alors j'apprécierais la suppression du downvote. –
Ne sait pas qui vous a downvoted, mais la première version que vous avez posté fonctionne, sauf que le deuxième paramètre (barre) est obligatoire .. serait génial si seulement le premier serait obligatoire. Au lieu de cela la version de las que vous avez posté, avec le/juste après le ^, ne fonctionne pas! – Strae
Ceci est la version qui fonctionne (selon l'entraîneur de regex) - seul le premier paramètre est obligatoire (au moins un caractère après le début /.) Je pensais qu'Apache commençait l'URI avec un /? Sinon, supprimez simplement la première barre oblique de l'expression rationnelle. –