O que $ 1 [QSA, L] significa em meu arquivo .htaccess?


Respostas:


215

Não é o lugar para dar um tutorial completo, mas aqui é resumido;

RewriteCond significa basicamente "execute o próximo RewriteRule apenas se for verdadeiro". O !-lcaminho é a condição de que a solicitação não seja para um link ( !significa não, -lsignifica link)

O RewriteRule significa basicamente que se a solicitação for feita que corresponda ^(.+)$(corresponder a qualquer URL, exceto a raiz do servidor), ela será reescrita, o index.php?url=$1que significa que uma solicitação de olleserá reescrita como index.php?url=olle).

QSAsignifica que se houver uma string de consulta passada com o URL original, ela será anexada à reescrita ( olle?p=1será reescrita como index.php?url=olle&p=1.

L significa que se a regra corresponder, não processe mais RewriteRules abaixo desta.

Para informações mais completas sobre isso, siga os links acima. O suporte de reescrita pode ser um pouco difícil de entender, mas existem alguns exemplos sobre stackoverflow para aprender.


QSA substitui ?a &, tornando-se impossível distinguir entre /page&foobarvs /page?foobar. Como posso impedir a substituição do QSA ?para &?
Pacerier

8

Se as seguintes condições forem verdadeiras, reescreva o URL:
Se o nome do arquivo solicitado não for um diretório,

RewriteCond %{REQUEST_FILENAME} !-d

e se o nome do arquivo solicitado não for um arquivo normal existente,

RewriteCond %{REQUEST_FILENAME} !-f

e se o nome do arquivo solicitado não for um link simbólico,

RewriteCond %{REQUEST_FILENAME} !-l

em seguida, reescreva a URL da seguinte maneira:
Pegue o nome do arquivo de solicitação inteiro e forneça-o como o valor de um parâmetro de consulta "url" para index.php. Anexe qualquer string de consulta do URL original como parâmetros de consulta adicionais (QSA) e pare de processar este arquivo .htaccess (L).

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

Apache docs #flag_qsa

Outro exemplo:

RewriteRule "/pages/(.+)" "/page.php?page=$1" [QSA]

Com o sinalizador [QSA], uma solicitação de

/ pages / 123? um = dois

será mapeado para

/page.php?page=123&one=two


0

Isto irá capturar pedidos de arquivos como version, releasee README.md, etc., que devem ser tratados quer como endpoints, se definido (como no caso do / release), ou como "não encontrado."

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.