2009-09-02 14 views
5

La mia società di hosting mi ha recentemente aggiornato da Apache 1 ad Apache 2, e ho iniziato a vedere un comportamento abbastanza diverso con il mio materiale mod_rewrite.Applicazione regole mod_rewrite AFTER DirectoryIndex viene applicata

Ecco il mio file .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> 

Ora, in precedenza con Apache 1, se si è andato a http://mysite.com/ poi la DirectoryIndex sarebbe prima in vigore (http://mysite.com/blog.html) e poi la RewriteRule sarebbe trasformarla in http://mysite.com/showpage.php?url=/blog.html

Ora con Apache 2, se vai a http://mysite.com/blog.html viene riscritto come previsto, ma se vai a http://mysite.com/ ti serve il file vanilla blog.html, senza riscriverlo a showpage.php. Così il RewriteRule viene applicato prima i calci DirectoryIndex in.

Oltre ad aggiungere una regola in più esplicitamente di prendere alla pagina principale (che sarà noioso in quanto avrei dovuto tenere conto di tutte le sottodirectory che hanno anche un DirectoryIndex Qualcuno sa come rendere Apache 2 applicare la RewriteRule dopo applicando DirectoryIndex?

+0

questo funziona per me con Apache 2.2.13. quale versione di apache stai usando? –

+0

Mi piacerebbe sapere se hai mai avuto una buona risposta a questo. Sono bloccato reimplementando la funzionalità di base del server (test per l'esistenza di directory, aggiunta barra finale) in un 'RewriteCond', e peggio, ho più indici'. * 'Cose in' DirectoryIndex', e sembra che devo aggiungere ' -f' test anche per loro. Compagni si stanno accumulando attorno al problema che la riscrittura viene applicata nella fase sbagliata. –

risposta

1

Prova questa regola, invece, della direttiva DirectoryIndex:

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

penso che non voglia rimuovere/sostituire DirectoryIndex. –

+0

@ax: Quindi dovrebbe prima provare anche la direttiva 'DirectoryIndex'. – Gumbo

+0

Come nota, ricorda che '% {REQUEST_FILENAME}' restituisce il percorso situato in docroot. Quindi, * potresti * dover anteporre la docroot ad esso come in 'RewriteCond/var/www% {REQUEST_FILENAME} -d' – puk

Problemi correlati