Preciso mudar o meu .htaccess
e há duas linhas que não entendi.
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
Quando devo usar essas linhas?
Preciso mudar o meu .htaccess
e há duas linhas que não entendi.
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
Quando devo usar essas linhas?
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, o index.php?url=$1
que significa que uma solicitação de olle
será reescrita como index.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 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.
?
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,
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]
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