Mod Riscrivi completo befuzzlement [chiuso]
-
05-07-2019 - |
Domanda
Ecco il mio file .htaccess
Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteRule subpage\?sid /index.php [R=301,L,NC]
La mia richiesta è http://example.com/subpage?sid
Continua a restituire 404 Not Found, piuttosto che reindirizzare a index.php
Ho provato a non sfuggire al? e cambiando la richiesta in http://example.com/subpage\?sid
Ho provato un sacco di cose per provare a farlo funzionare, ma ora sono sconcertato.
Soluzione
QUERY_STRING non fa parte dell'URI. Dalla documentazione per RewriteRule :
Nota: stringa di query
Il Pattern non verrà confrontato con la stringa di query. Invece, devi usare un RewriteCond con la variabile
% {QUERY_STRING}
.
Come dice il documento, dovrai usare un RewriteCond, qualcosa come:
RewriteCond %{QUERY_STRING} (^|&)sid([&=]|$) [NC]
RewriteRule ^/?subpage /index.php [R=301,L,NC]
Se% {QUERY_STRING} non è davvero un'opzione, prova:
# 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]
Inoltre, non hai quasi mai bisogno di RewriteBase mentre lo stai utilizzando (" RewriteBase / "). Commenta la riga e testala per essere sicuro, ma probabilmente scoprirai che puoi eliminarla senza alcun effetto negativo.
Altri suggerimenti
Forse devi controllare l'impostazione VirtualHost per il tuo sito e configurare l'impostazione AllowOverride per la directory corrispondente?
<Directory /var/www/vhosts/some_host>
....
AllowOverride All
</Directory>
Altre informazioni su AllowOverride
di apache