2009-09-02 2 views
5

Ma société d'hébergement m'a récemment mis à niveau d'Apache 1 à Apache 2, et j'ai commencé à voir un comportement assez différent avec mon mod_rewrite.Application des règles mod_rewrite APRÈS l'application de DirectoryIndex

Voici mon fichier .htaccess:

DirectoryIndex blog.html 

# Various rewrite rules. 
<IfModule mod_rewrite.c> 
    RewriteEngine on 

    # Rewrite current-style URLs of the form 'showpage.php?url=x'. 
    RewriteRule ^(.*\.html)$ showpage.php?url=$1 [L,QSA] 

</IfModule> 

Maintenant, précédemment avec Apache 1, si vous êtes allé à http://mysite.com/ alors le DirectoryIndex devrait d'abord prendre effet (http://mysite.com/blog.html), puis le RewriteRule tournerait que dans http://mysite.com/showpage.php?url=/blog.html

Maintenant avec Apache 2, si vous allez à http://mysite.com/blog.html il est réécrit comme prévu, mais si vous allez à http://mysite.com/ il vous sert le fichier vanilla blog.html, sans le réécrire à showpage.php. Ainsi, le RewriteRule est appliqué avant les coups de pied DirectoryIndex dans.

En plus d'ajouter une règle supplémentaire explicitement pour attraper la page racine (qui sera fastidieux car je dois tenir compte de tous les sous-répertoires qui ont aussi un DirectoryIndex) quelqu'un sait-il un moyen de faire Apache 2 appliquer le RewriteRule après en appliquant le DirectoryIndex?

+0

cela fonctionne pour moi avec apache 2.2.13. quelle version apache utilisez-vous? –

+0

J'aimerais entendre si vous avez déjà eu une bonne réponse à cela. Je suis bloqué en réimplémentant la fonctionnalité de base du serveur (test de l'existence de l'annuaire, ajout de slash) dans un 'RewriteCond', et pire, j'ai plusieurs choses' index. * 'Dans' DirectoryIndex', et il semble que je doive ajouter ' -f' teste aussi pour eux. Kludges s'accumulent autour du problème que la réécriture est appliquée au mauvais stade. –

Répondre

1

Essayez cette règle au lieu de la directive DirectoryIndex:

RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^(.*)/?$ $1/blog.html 
+0

Je pense qu'il ne veut pas supprimer/remplacer le DirectoryIndex. –

+0

@ax: Ensuite, il devrait d'abord l'essayer en plus de la directive 'DirectoryIndex'. – Gumbo

+0

En note, rappelez-vous que '% {REQUEST_FILENAME}' renvoie le chemin situé à docroot. Par conséquent, vous * pouvez * devoir ajouter le docroot comme ça: 'RewriteCond/var/www% {REQUEST_FILENAME} -d' – puk