La chaîne de réécriture interne apparaît dans la redirection

J’utilise htaccess suivant

  RewriteEngine On RewriteCond %{HTTP_HOST} !^www\. RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301] RewriteRule ^user/([^/]*)/$ /user/index.php?usr=$1 

Les trois premières lignes redirigent l’URL non www vers www pour mon site Web.

L’autre ligne redirige à des fins canoniques, par exemple www.mysite.com/user/index.php?usr=JAHAJEE deviendra www.mysite.com/user/JAHAJEE/ .

Mon problème est que, après avoir ajouté la redirection ci-dessus pour non www à www, les pages redirigées canoniques affichent le paramètre url (par exemple, www.mysite.com/user/JAHAJEE/?usr=JAHAJEE). Veuillez vérifier http://www.jahajee.com/user/JAHAJEE/ & http://jahajee.com/user/JAHAJEE/

Comment puis-je empêcher l’affichage des parameters d’URL dans l’URL redirigée? Merci d’avance.

Le [R=301] laissera mod_rewrite savoir que la requête doit être redirigée, mais la requête ne sera pas redirigée instantanément. Il évaluera les règles jusqu’à ce qu’il trouve l’indicateur [L] ou [END] (ou qu’il atteigne la fin du fichier). Il correspond maintenant à la première règle et indique que lorsque mod_rewrite se sent prêt, il doit redirect. mod_rewrite n’a toujours pas trouvé d’indicateur L ou END et a toujours des règles à respecter. Il correspondra alors à la deuxième règle et l’inclura dans la redirection.

Vous devez changer les indicateurs pour la première règle à [R=301,L] pour le faire redirect. La requête redirigée invoquera à nouveau ce .htaccess et la seconde règle sera mise en correspondance si nécessaire. Il fonctionnera alors correctement en tant que réécriture interne à nouveau.

peut être que vous pouvez utiliser la redirection 301 ou 303
301 pour définitivement
303 pour temporaire