2009-11-27 8 views
1

Voici mon fichier .htaccessMod Rewrite befuzzlement complète

Options +FollowSymlinks 
RewriteEngine On 
RewriteBase/

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

Ma demande est http://example.com/subpage?sid

Il revient sans cesse 404 Not Found, plutôt que de rediriger vers index.php

J'ai essayé pas échapper à la? et changer la demande de http://example.com/subpage\?sid

J'ai essayé des tas de choses pour essayer obtenir ce travail, mais je suis maintenant déconcerté.

+0

Avez-vous tri 'RewriteRule^souspage \? Sid/index.php'? (Notez le caret ^) – Pascal

+0

Maintenant que j'ai déjà donné une réponse pour cela, il appartient vraiment à ServerFault. – outis

+0

Ceci est une sorte de programmation donc c'est OK sur stackoverflow. –

Répondre

4

Le composant QUERY_STRING ne fait pas partie de l'URI. De la documentation RewriteRule:

Note: chaîne de requête

Le Motif ne sera pas contre la chaîne en correspondance de requête. Au lieu de cela, vous devez utiliser un RewriteCond avec la variable %{QUERY_STRING}.

Comme le doc dit, vous aurez besoin d'utiliser un RewriteCond, quelque chose comme:

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

Si% {QUERY_STRING} 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] 

En outre, vous n'avez presque jamais besoin de RewriteBase lorsque vous l'utilisez ("RewriteBase /"). Commentez la ligne et testez-la pour être sûr, mais vous trouverez probablement que vous pouvez la supprimer sans affecter.

+0

Je ne peux pas utiliser juste QUERY_STRING pour des raisons compliquées, mais votre réponse a du sens. Ce qui suit me donne encore 404:. RewriteCond% {THE_REQUEST} sous-page \ sid $ RewriteRule^* /index.php de $ [R = 301, L, NC] –

+0

C'est parce que "sid" est pas à la fin de% {LA DEMANDE}; il y a toujours la version HTTP. Pourquoi ne pouvez-vous pas utiliser QUERY_STRING? – outis

0

Peut-être que vous devez vérifier le réglage VirtualHost pour votre site et définissez le paramètre AllowOverride pour le répertoire correspondant?

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

est ici plus sur AllowOverride Apache