Pregunta

Aquí está mi archivo .htaccess

Options +FollowSymlinks
RewriteEngine On
RewriteBase /

RewriteRule subpage\?sid /index.php [R=301,L,NC]

Mi solicitud es http://example.com/subpage?sid

Sigue devolviendo 404 No encontrado, en lugar de redirigir a index.php

He intentado no escapar de la? y cambiando la solicitud a http://example.com/subpage\?sid

He intentado un montón de cosas para intentar que esto funcione, pero ahora estoy perplejo.

¿Fue útil?

Solución

El QUERY_STRING no es parte del URI. De la documentación para RewriteRule :

  

Nota: Cadena de consulta

     

El Patrón no se comparará con la cadena de consulta. En su lugar, debe usar un RewriteCond con la variable % {QUERY_STRING} .

Como dice el documento, deberás usar un RewriteCond, algo como:

RewriteCond %{QUERY_STRING} (^|&)sid([&=]|$) [NC]
RewriteRule ^/?subpage /index.php [R=301,L,NC]

Si% {QUERY_STRING} realmente no es una opción, intente:

# 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]

Además, casi nunca necesitas RewriteBase mientras lo estás utilizando (" RewriteBase / "). Comente la línea y pruébela para estar segura, pero probablemente encontrará que puede eliminarla sin afectar a nadie.

Otros consejos

¿Tal vez necesite verificar la configuración de VirtualHost para su sitio y establecer la configuración de Permitir anulación para el directorio correspondiente?

<Directory /var/www/vhosts/some_host>
     ....
     AllowOverride All
</Directory>

Aquí hay más información sobre AllowOverride

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top