2009-09-02 11 views
5

Moja firma hostingowa uaktualniła mnie ostatnio z Apache 1 do Apache 2 i zacząłem widzieć całkiem inne zachowanie z moimi rzeczami mod_rewrite.Stosowanie reguł mod_rewrite PO ZASTOSOWANIE DirectoryIndex

Oto mój plik .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> 

Teraz poprzednio z Apache 1, jeśli poszedł do http://mysite.com/ wtedy DirectoryIndex najpierw podjąć działanie (http://mysite.com/blog.html), a następnie RewriteRule okaże że w http://mysite.com/showpage.php?url=/blog.html

Teraz z Apache 2, jeśli przejdziesz do http://mysite.com/blog.html, zostanie przepisany zgodnie z oczekiwaniami, ale jeśli przejdziesz do http://mysite.com/, wyświetli on plik vanilla blog.html bez przepisywania go na stronę showpage.php. Więc RewriteRule jest stosowana przed rzutach DirectoryIndex w.

Oprócz dodawania dodatkowej reguły wyraźnie złapać stronę korzenia (co będzie uciążliwe ponieważ musiałbym uwzględnić wszystkie podkatalogi, które także mają DirectoryIndex) Czy ktoś wie, w jaki sposób Apache 2 może zastosować RewriteRule po stosując DirectoryIndex?

+0

to działa na mnie z Apache 2.2.13. z której wersji apache korzystasz? –

+0

Chciałbym usłyszeć, jeśli kiedykolwiek masz na to dobrą odpowiedź. Utknąłem na reimplementacji podstawowej funkcjonalności serwera (test na istnienie katalogu, dodanie końcowego slasha) w 'RewriteCond', i co gorsza, mam wiele' index. * 'Rzeczy w' DirectoryIndex', i wygląda na to, że muszę dodać '. -f' testy również dla nich. Kłazy zbierają się wokół problemu, że przepisywanie jest stosowane na niewłaściwym etapie. –

Odpowiedz

1

Wypróbuj tę zasadę zamiast dyrektywy DirectoryIndex:

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

Myślę, że nie chce usunąć/zastąpić DirectoryIndex. –

+0

@ax: Następnie powinien najpierw spróbować tego dodatkowo do dyrektywy 'DirectoryIndex'. – Gumbo

+0

Pamiętaj, że '% {REQUEST_FILENAME}' zwraca ścieżkę umieszczoną w docroot. Dlatego możesz * musieć * przedkładać do niego docroot, tak jak w przypadku 'RewriteCond/var/www% {REQUEST_FILENAME} -d' – puk