2010-01-06 7 views
1

je les règles de réécriture suivantes:Réécrire les règles montrant dans la barre d'adresse du navigateur

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteBase/

    # Route all URLs to dispatch.php. 
    RewriteCond %{REQUEST_URI} !media/ 
    RewriteRule ^(.*)$ dispatch.php [L] 

    #Route requests to /media/* to /project/media/* 
    RewriteRule ^media/(.*)?$ project/media/$1 [L] 

</IfModule> 

Tout est réécrite pour dispatch.php à moins que l'URI commence par media/ auquel cas il va réécrire l'URI project/media/*. Tout fonctionne bien et si je navigue vers example.com/media/css/style.css la feuille de style qu'il a servi. Si je navigue vers example.com/media/css/, une erreur 403 Forbidden est envoyée. Parfait!

Toutefois, si je navigue à example.com/media/css (manque le «/» final), puis l'URL dans la barre d'adresse est réécrite pour example.com/project/media/css et la demande est traitée par dispatch.php. Comment puis-je empêcher ce comportement de se produire? Je voudrais qu'il soit géré par dispatch.php mais sans projects/ étant ajouté à l'URL.

Résolue: Le problème était dû au fait que mod_dir redirigeait les URL sans barre oblique finale. Cela a entraîné l'emplacement tel qu'il apparaît sur le disque utilisé pour la redirection, ce qui signifie que le sous-dossier (projet) a été ajouté à l'URI. La .htaccess finale que j'est la suivante:

Options +FollowSymLinks +MultiViews -Indexes 
Options -Indexes 

<IfModule mod_dir.c> 
    DirectorySlash Off 
</IfModule> 

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteBase/

    #Add trailing slashes 
    RewriteCond %{REQUEST_URI} !(.*)/$ 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ $1/ [R=301,L] 

    #Route requests to /media/* to /project/media/* 
    RewriteRule ^media(/.*)$ project/media$1 [L] 

    # Route all URLs to dispatch.php. 
    RewriteCond %{REQUEST_URI} !^media/(.*) 
    RewriteRule ^(.*)$ dispatch.php [L] 

</IfModule> 

Le nouveau .htaccess fait la même chose que précédemment, ainsi que:

  • mod_dir Inhibe.
  • Ajoute des barres obliques à l'URI en utilisant une RewriteRule.
+1

Pas besoin de créer une nouvelle question: http://stackoverflow.com/questions/2010249/redirecting-media-to-project-media-and-everything-else-to-dispatch-php –

+0

Je vais m'assurer de ne pas recommencer, mais je pensais que le but était suffisamment différent pour exiger sa propre question. –

Répondre

1

Vous pouvez explicitement bloquer ces URL d'annuaire avec d'autres règles de réécriture. Ou ... Vous pouvez utiliser DirectorySlash pour désactiver la redirection.

http://httpd.apache.org/docs/2.0/mod/mod_dir.html

+0

Merci, il m'a fallu du temps pour comprendre pourquoi vous parliez de mod_dir! –

Questions connexes