RewriteRule ^([^/]*)$ /index.php?shortened_url=$1 [L]
Isso resultará em um loop de reescrita porque /index.php?shortened_url=value
será reescrito novamente em /index.php?shortened_url=index.php
(de novo e de novo).
Uma maneira de evitar esse loop de regravação é apenas reescrever quando não houver uma string de consulta (desde que você não esteja usando a string de consulta para outros propósitos neste URL). Por exemplo:
RewriteCond %{QUERY_STRING) ^$
RewriteRule ^([^/]*)$ /index.php?shortened_url=$1 [L]
Ou exclua pontos do padrão RewriteRule
. Por exemplo:
RewriteRule ^([^/.]*)$ /index.php?shortened_url=$1 [L]
O importante a observar aqui é que o sinalizador L
( last
) não interrompe todo o processamento quando usado em arquivos .htaccess
por diretório. Ele simplesmente interrompe a atual rodada de processamento. O processo de reescrita começa efetivamente de novo até que a URL passe inalterada. Você precisa impedir que o URL reescrito seja reescrito novamente.
that will change:
https://example.com/index.php?shortened_url=value
to
https://example.com/value
bocian85 certamente tem um ponto a respeito de sua descrição, já que seu código está fazendo o oposto. Seu código reescreve https://example.com/value
to https://example.com/index.php?shortened_url=value
. (Presumivelmente, você já alterou os URLs em seu aplicativo para estar no formato https://example.com/value
?)
No entanto, parece que o código está fazendo a coisa certa, então acho que é apenas sua descrição que está de volta à frente. (?) (Curioso ... as pessoas geralmente descrevem isso como você fez - na ordem inversa - como se eles estivessem descrevendo o resultado líquido no aplicativo, e não o que a diretiva realmente faz).