2010-07-28 6 views
0

En utilisant RewriteEngine d'Apache, comment réécrire /foo en index.php?x=foo mais réécrire /foo/bar en index.php?x=foo&bar=true dans un RewriteRule?Comment réécrire/foo à index.php? X = foo mais aussi/foo/bar à index.php? X = foo & bar = true dans une seule RewriteRule?

Je maintenant:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)? index.php?x=$1 [L,NC] # rewrites /foo to index.php?x=foo, but not /foo/bar to index.php?x=foo&bar=true 

Cette récrit ne /foo à index.php?x=foo, mais pas /foo/bar-index.php?x=foo&bar=true. Comment puis-je ajouter cela au RewriteRule?

+0

La question générale est: comment faire deux réécritures dans un RewriteRule? – Sudoman

+1

En d'autres termes, vous ne pouvez pas réaliser deux réécritures avec une seule RewriteRule. –

+0

Alors, comment pourrais-je m'y prendre? Puis-je utiliser deux 'RewriteRule's sans gâcher le' RewriteCond's? – Sudoman

Répondre

2

Essayez ces règles:

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule^- [L] 
RewriteRule ^([^/]+)$ index.php?x=$1 [L] 
RewriteRule ^([^/]+)/([^/]+)$ index.php?x=$1&$2=true [L] 

La première règle est de briser si l'URI demandé peut être mis en correspondance avec un fichier ou un répertoire existant. Sinon, les deux autres règles sont testées et appliquées si l'une d'entre elles correspond au chemin URI demandé.

Questions connexes