2009-01-24 7 views
1
RewriteEngine on 
RewriteRule ^page/?$ page.php [L] 

Ceci correspond à l'URL www.site.com/page// mais en interne, il agit différemment de www .site.com/page/parce que les feuilles de style et les images n'apparaissent plus correctement. Est-ce que je fais quelque chose de mal ou est-ce juste quelque chose que je dois traiter si je ne veux pas avoir beaucoup d'ennuis?

Pour moi, il semble que cela ne devrait correspondre www.site.com/page ou www.site.com/page/

Répondre

4

Apache bandes le segment de chemin vide. Donc /path// est traité comme /path/. Mais votre navigateur n'est pas si les URL relatives sont résolues en utilisant /path//.

Si vous souhaitez supprimer les multiples barres obliques, vous pouvez utiliser la règle suivante:

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /(([^/\ ]+/)*)/+([^\ ]*) 
RewriteRule^/%1%3 [L,R=301] 

Explaination

Malgré Apache supprime les segments de chemin vide interne, la variable d'environnement THE_REQUEST (tenant le HTTP request line) reste intacte. Nous pouvons donc utiliser cette valeur pour vérifier plusieurs barres obliques.

  • ^[A-Z]+\ / correspond à la méthode de requête, l'espace suivant et le premier caractère de barre oblique du chemin URI.
  • (([^/\ ]+/)*) correspond à tous les segments de chemin suivants non vides (foo/, foo/bar/, foo/bar/baz/, etc.) ou rien, s'il n'y en a pas.
  • /+ correspond aux segments de chemin vides en tant que caractère avant que cette barre oblique ne soit toujours une autre barre oblique (voir les expressions précédentes). Correspond au reste de l'URI (qui peut contenir d'autres segments de chemin vides).

Exemple: Disons que nous demandons http://example.com/foo/bar//baz, la ligne de demande ressemblera à ceci:

GET /foo/bar//baz HTTP/1.1 

Le modèle serait alors correspondre comme suit:

0: GET /foo/bar//baz 
1: foo/bar/ 
2: bar/ 
3: baz 

Ainsi, le chemin demandé /foo/bar//baz serait redirigé vers /foo/bar/baz (/%1%3).

+0

Brillant. Pouvez-vous expliquer un peu ce que chacune de ces lignes fait? –

Questions connexes