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.

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top