Mod Rewrite complete befuzzlement [cerrado]
-
05-07-2019 - |
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.
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