Mod reescrita completa combinando [fechado
-
05-07-2019 - |
Pergunta
Aqui está o meu arquivo .htaccess
Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteRule subpage\?sid /index.php [R=301,L,NC]
Meu pedido é http://example.com/subpage?sid
Continua retornando 404 não encontrado, em vez de redirecionar para index.php
Eu tentei não escapar do? e alterando o pedido para http://example.com/subpage\?sid
Eu tentei muitas coisas para tentar fazer isso funcionando, mas agora estou perplexo.
Solução
O query_string não faz parte do URI. Da documentação para Reescriture:
Nota: String de consulta
o Padrão não será correspondido com a sequência de consultas. Em vez disso, você deve usar um reescrita com o
%{QUERY_STRING}
variável.
Como diz o médico, você precisará usar um reescrita, algo como:
RewriteCond %{QUERY_STRING} (^|&)sid([&=]|$) [NC]
RewriteRule ^/?subpage /index.php [R=301,L,NC]
Se %{query_string} realmente não for uma opção, tente:
# Apache is supposed to use PCRE, but doesn't seem to like "\\s"
RewriteCond %{THE_REQUEST} subpage?sid[^!-~] [NC]
RewriteRule ^/?subpage /index.php [R=301,L,NC]
Além disso, você quase nunca precisa do RewriteBase, pois está usando ("RewriteBase /"). Comente a linha e teste -a para ter certeza, mas você provavelmente descobrirá que pode excluí -la sem afetar mal.
Outras dicas
Talvez você precise verificar a configuração do VirtualHost para o seu site e definir a configuração do allowoverride para o diretório correspondente?
<Directory /var/www/vhosts/some_host>
....
AllowOverride All
</Directory>
Aqui está mais sobre o Apache Allowoverride