Muszę zmienić moją .htaccessi są dwie linie, których nie rozumiem.
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
Kiedy powinienem używać tych linii?
Muszę zmienić moją .htaccessi są dwie linie, których nie rozumiem.
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
Kiedy powinienem używać tych linii?
Odpowiedzi:
Nie jest to miejsce na przedstawienie pełnego samouczka, ale tutaj jest w skrócie;
RewriteCond w zasadzie oznacza „wykonaj następną RewriteRule tylko wtedy, gdy to prawda”. !-lŚcieżka jest warunek, że wniosek nie jest linkiem ( !środki nie, -lśrodki link)
RewriteRule w zasadzie oznacza, że jeśli wniosek jest zrobione, że mecze ^(.+)$(pasuje do dowolnego adresu URL z wyjątkiem korzenia serwera), zostanie on przepisany jako index.php?url=$1co oznacza prośbę o ollezostanie przepisany jako index.php?url=olle).
QSAoznacza, że jeśli istnieje ciąg zapytania przekazany z oryginalnym adresem URL, zostanie on dołączony do przepisywania ( olle?p=1zostanie przepisany jako index.php?url=olle&p=1.
L oznacza, że jeśli reguła pasuje, nie przetwarzaj więcej RewriteRules poniżej tej.
Aby uzyskać więcej informacji na ten temat, skorzystaj z powyższych linków. Obsługa przepisywania może być nieco trudna do uchwycenia, ale istnieje sporo przykładów dotyczących przepływu stosów, z których można się uczyć.
?się &, uniemożliwiając odróżnić /page&foobarvs /page?foobar. Jak mogę powstrzymać QSA przed zamianą ?na &?
Jeśli spełnione są następujące warunki, przepisz adres URL:
Jeśli żądana nazwa pliku nie jest katalogiem,
RewriteCond %{REQUEST_FILENAME} !-d
a jeśli żądana nazwa pliku nie jest zwykłym plikiem, który istnieje,
RewriteCond %{REQUEST_FILENAME} !-f
a jeśli żądana nazwa pliku nie jest dowiązaniem symbolicznym,
RewriteCond %{REQUEST_FILENAME} !-l
następnie przepisz adres URL w następujący sposób:
Weź całą nazwę pliku żądania i podaj ją jako wartość parametru zapytania „url” do index.php. Dołącz dowolny ciąg zapytania z pierwotnego adresu URL jako dalsze parametry zapytania (QSA) i zatrzymaj przetwarzanie tego pliku .htaccess (L).
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
Inny przykład:
RewriteRule "/pages/(.+)" "/page.php?page=$1" [QSA]
Z flagą [QSA] żądanie dotyczące
/ pages / 123? one = two
zostanie zmapowany do
/page.php?page=123&one=two