Porównaj ceny domen i usług IT, sprzedawców z całego świata

Co powoduje to dziwne zachowanie z mod_rewrite?


Oto moja zasada:
RewriteRule ^user/(\d+)$ rewrite.php?id=$1

To przekierowuje, ale
       $_GET['id']
nie zainstalowany. Jeśli zmienię powyższą zasadę na:
RewriteRule ^anything/(\d+)$ rewrite.php?id=$1

To działa. Dlaczego jedno działa, a drugie nie?
Oto kilka dodatkowych informacji:
  • Brak nazwanego katalogu
             user       
  • Jedyny inny plik .htaccess w hierarchii jest pusty.
  •          anything       
    można zastąpić czymkolwiek innym niż
             user       
    .


Aktualizacja:

sprawdziłem
       rewritelog
i jest pusty.
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Stanie się tak, jeśli
         MultiViews
włączone (część mod_negotiation). Jeśli funkcja MultiViews jest włączona i zażądasz
/user
gdzie
/user.php
istnieje jako plik fizyczny, wówczas mod_negotiation uruchamia wewnętrzne żądanie dla
         users.php
(„szuka” odpowiedniego pliku, który zwróci właściwy typ MIME).
Musisz wyłączyć MultiViews w swoim
         .htaccess
plik:
Options -MultiViews

MultiViews jest domyślnie wyłączone w Apache, jednak niektóre współdzielone hosty włączają to z jakiegoś powodu.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

W końcu znalazłem przyczynę problemu ... Oczywiście (i nie jest to nigdzie udokumentowane, żebym mógł znaleźć), jeśli masz plik (w tym przypadku PHP)

o tej samej nazwie, co pierwszy katalog wirtualny

zasada przepisywania nie działa. (Pętle przekierowań, brakujące parametry itp.)
Na przykład następująca zasada:
#RewriteRule ^user/(\d+)$ user.php?id=$1 [L]

Nie zadziała, jeśli istnieje plik o nazwie user.php

w tym samym katalogu, co plik PHP

.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się