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).
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."
Respostas:
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
!-l
caminho é a condição de que a solicitação não seja para um link (!
significa não,-l
significa 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, oindex.php?url=$1
que significa que uma solicitação deolle
será reescrita comoindex.php?url=olle
).QSA
significa que se houver uma string de consulta passada com o URL original, ela será anexada à reescrita (olle?p=1
será reescrita comoindex.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.
fonte
?
a&
, tornando-se impossível distinguir entre/page&foobar
vs/page?foobar
. Como posso impedir a substituição do QSA?
para&
?Se as seguintes condições forem verdadeiras, reescreva o URL:
Se o nome do arquivo solicitado não for um diretório,
e se o nome do arquivo solicitado não for um arquivo normal existente,
e se o nome do arquivo solicitado não for um link simbólico,
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).
Apache docs #flag_qsa
Outro exemplo:
Com o sinalizador [QSA], uma solicitação de
será mapeado para
fonte
Isto irá capturar pedidos de arquivos como
version
,release
eREADME.md
, etc., que devem ser tratados quer como endpoints, se definido (como no caso do / release), ou como "não encontrado."fonte