Mod Rewrite complete befuzzlement [fermé]
-
05-07-2019 - |
Question
Voici mon fichier .htaccess
Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteRule subpage\?sid /index.php [R=301,L,NC]
Ma demande est http://example.com/subpage?sid
Il retourne 404 Introuvables au lieu de rediriger vers index.php
J'ai essayé de ne pas échapper à la? et modification de la demande en http://example.com/subpage\?sid
J'ai essayé des tas de choses pour essayer de faire fonctionner cela, mais je suis maintenant perplexe.
La solution
QUERY_STRING ne fait pas partie de l'URI. Extrait de la documentation de RewriteRule :
Remarque: chaîne de requête
Le modèle Modèle ne sera pas comparé à la chaîne de requête. Au lieu de cela, vous devez utiliser un RewriteCond avec la variable
% {QUERY_STRING}
.
Comme le dit la doc, vous devrez utiliser un RewriteCond, quelque chose du genre:
RewriteCond %{QUERY_STRING} (^|&)sid([&=]|$) [NC]
RewriteRule ^/?subpage /index.php [R=301,L,NC]
Si% {QUERY_STRING} n'est vraiment pas une option, essayez:
# 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]
De plus, vous n’avez presque jamais besoin de RewriteBase puisque vous l’utilisez ("RewriteBase /"). Commentez la ligne et testez-la pour vous en assurer, mais vous constaterez probablement que vous pouvez la supprimer sans aucun problème.
Autres conseils
Peut-être devez-vous vérifier le paramètre VirtualHost de votre site et définir le paramètre AllowOverride pour le répertoire correspondant?
<Directory /var/www/vhosts/some_host>
....
AllowOverride All
</Directory>
En savoir plus sur le AllowOverride d'Apache