2009-12-11 9 views
3

Que signifie cette règle de réécriture?RewriteRule (mod_rewrite)

RewriteRule ^$ app/webroot/ [L] 
    RewriteRule (.*) app/webroot/$1 [L] 

Désolé, même après avoir lu l'explication de la syntaxe mod_rewrite, je ne comprenais pas ...: -/ Quelqu'un peut-il me expliquer ce que fait cette règle (s).

Merci beaucoup.

Répondre

6

Je vais essayer de donner une brève explication qui, je l'espère, éclaircira cela pour vous. Premièrement: Si vous n'avez jamais utilisé d'expressions régulières, alors allez-y chercher.

Une RewriteRule est trois pièces différentes. La première est l'expression utilisée pour rechercher une chaîne de requête pour un modèle particulier. La seconde est la chaîne de destination qui est réellement servie depuis le serveur. Troisièmement sont les options qui vont dans les crochets.

Si un client envoie une requête au serveur au format de l'une des expressions régulières, la chaîne de destination est appelée et renvoyée à l'utilisateur, bien que l'utilisateur ne voit pas cette action. Tout ce qui figure dans votre expression régulière à l'intérieur d'un ensemble de parenthèses sera enregistré pour être utilisé dans la chaîne de destination.

Ainsi, avec vos deux règles (en supposant que votre site est http://www.example.com/), ce qui suit se passerait-il:

entrée I http://www.example.com et le serveur renvoie la page d'index ou la filelisting (ou quelque chose d'autre déjà déterminé par un précédent. fichier htaccess).

J'ai entré http://www.example.com/page2.html et le serveur retournerait app/webroot/page2.html. Si ce fichier n'existe pas, j'obtiendrais une page d'erreur 404 à la place.

Les deux règles de réécriture ont [L] à la fin de celles-ci. Qu'est-ce que cela fait, c'est qu'il indique à Apache que c'est la dernière règle à suivre. Si la règle s'applique, Apache l'exécute et arrête de lire d'autres règles. Il existe d'autres options que vous pouvez utiliser, séparées par des virgules.

+0

S'il y a quelque chose en particulier, j'ai dit que cela vous rend confus, faites le moi savoir et je vais essayer de le réparer. –

+0

Merci beaucoup pour l'explication. La deuxième règle (RewriteRule (. *) App/webroot/$ 1 [L]) me semble tout à fait logique après avoir lu votre explication. Mais que fait la première règle? (... surtout le "^ $" dans la première règle me semble étrange). Merci encore –

+0

Seth l'explique très bien.^est défini comme "début de chaîne" dans une expression régulière, et $ est défini comme "fin de chaîne". Dans ce cas, vous avez '^ $' qui évalue à une chaîne vide. Ainsi, le serveur évaluera ./app/webroot/ parce qu'il ne cherche pas de fichier. En raison de la façon dont Apache gère ces requêtes "vides", il peut renvoyer tout ce que j'ai mentionné. En outre, il ajoutera '/' parce que webroot est un répertoire. –

1

^$ attrape les demandes à / et les redirige vers app/webroot/. Le [L] indique qu'il s'agit de la "dernière" règle, ce qui signifie que mod_rewrite arrêtera le traitement si cette règle correspond à la requête.

(.*) correspond à n'importe quoi, et le redirige vers app/webroot/, et ajoute la partie "n'importe quoi". Encore une fois le [L] signifie arrêter le traitement après que cette règle a été déclenchée.

La première règle attraperait demandes de http://www.yoursite.com/, de les envoyer à http://www.yoursite.com/app/webroot/ (votre serveur web alors servir le document d'index, comme index.php pour satisfaire la demande.

La deuxième règle retiendrait toute autre demande , comme http; // www.yoursite.com **/path/to/some/page.php **. La partie en gras est "capturée" et mod_rewrite enverra la requête à http://www.yoursite.com/app/webroot/chemin/vers/un/page.php.

L'utilisateur ne verrait http://www.yoursite.com/.

Notez également que cette expression posera probablement un problème.Si vous tapez http://www.yoursite.com/app/webroot/index.php, mod_rewrite va changer la demande en http://www.yoursite.com/app/webroot/app/webroot/index.php, ce qui n'est probablement pas ce que vous voulez.

+0

merci beaucoup seth –