Co oznacza $ 1 [QSA, L] w moim pliku .htaccess?

Odpowiedzi:

215

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ć.

Joachim Isaksson
źródło
QSA zastępuje ?się &, uniemożliwiając odróżnić /page&foobarvs /page?foobar. Jak mogę powstrzymać QSA przed zamianą ?na &?
Pacerier
8

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]

Dokumenty Apache #flag_qsa

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

antelove
źródło
0

To przechwytywanie żądań do plików, takich jak version, releasei README.md, itd., Które powinny być traktowane zarówno jako punktów końcowych, jeśli zdefiniowane (jak w przypadku / release), lub jako „nie znaleziono”.

Pyae Sone
źródło