268 votes

.htaccess rewrite pour rediriger l'URL racine vers un sous-répertoire

J'essaie d'obtenir

www.example.com

pour aller directement à

www.example.com/store

J'ai essayé plusieurs bouts de code et aucun ne fonctionne. Je vous en prie, aidez-moi !

Ce que j'ai essayé :

Options +FollowSymlinks
RewriteEngine on

RewriteCond %{HTTP_HOST} ^example.com$
RewriteRule (.*) http://www.example.com/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^(.+)\www.example\.com$
RewriteRule ^/(.*)$ /samle/%1/$1 [L]

Qu'est-ce que je fais de mal ?

16voto

user1801050 Points 71

Cela semblait la solution la plus simple :

RewriteEngine on
RewriteCond %{REQUEST_URI} ^/$
RewriteRule (.*) http://www.example.com/store [R=301,L]

J'obtenais des boucles de redirection avec certaines des autres solutions.

8voto

inf3rno Points 2989

Je ne comprends pas votre question...

Si vous voulez rediriger chaque demande vers un sous-dossier :

RewriteRule ^(.*)$ shop/$1 [L,QSA]

http://www.example.com/* -> wwwroot/store/*

Si vous voulez rediriger vers un sous-dossier qui a le nom de domaine

RewriteCond %{HTTP_HOST} ([^\.]+\.[^\.]+)$
RewriteRule ^(.*)$ %1/$1 [L,QSA]

http://www.example.com/* -> wwwroot/example.com/*

7voto

Nir O. Points 454

J'ai constaté que pour éviter la redirection circulaire, il est important de limiter la portée de la redirection au répertoire racine. J'aurais utilisé :

RewriteEngine on
RewriteCond %{REQUEST_URI} ^/$
RewriteRule (.*) http://www.example.com/store [R=301,L]

3voto

Artem Russakovskii Points 7341

Je pense que les principaux problèmes avec le code que vous avez posté sont :

  • la première ligne correspond à un hôte commençant strictement par sample.com, donc www.sample.com ne correspond pas.

  • la deuxième ligne veut au moins un caractère, suivi de www.sample.com qui ne correspond pas non plus (pourquoi avez-vous échappé le premier w ?)

  • aucune des règles incluses ne redirige vers l'url que vous avez spécifié dans votre objectif (de plus, sample est mal orthographié comme samle, mais ce n'est pas pertinent).

Pour référence, voici le code que vous avez actuellement :

Options +FollowSymlinks
RewriteEngine on

RewriteCond %{HTTP_HOST} ^sample.com$
RewriteRule (.*) http://www.sample.com/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^(.+)\www.sample\.com$
RewriteRule ^/(.*)$ /samle/%1/$1 [L]

2voto

Steven Points 5514

Une petite recherche sur Google me donne ces résultats :

RewriteEngine On
RewriteBase /
RewriteRule ^index.(.*)?$ http://domain.com/subfolder/ [r=301]

Cela redirigera toute tentative d'accès d'accéder à un fichier nommé index.something vers votre sous-dossier, que le fichier existe ou non.

Ou essayez ceci :

RewriteCond %{HTTP_HOST} !^www.sample.com$ [NC]
RewriteRule ^(.*)$ %{HTTP_HOST}/samlse/$1 [R=301,L]

Je n'ai pas fait beaucoup de redirection dans le fichier .htaccess, donc je ne suis pas sûr que cela fonctionne.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X