Muszę zmienić moją .htaccess
i 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ą .htaccess
i 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=$1
co oznacza prośbę o olle
zostanie przepisany jako index.php?url=olle
).
QSA
oznacza, że jeśli istnieje ciąg zapytania przekazany z oryginalnym adresem URL, zostanie on dołączony do przepisywania ( olle?p=1
zostanie 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&foobar
vs /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