.réécrire htaccess pour rediriger L'URL root vers un sous-répertoire

Tenter d'obtenir

www.example.com

pour aller directement à

www.example.com/store

j'ai essayé plusieurs bits de code et aucun ne fonctionne.

Ce que j'ai essayé:

Options +FollowSymlinks
RewriteEngine on

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

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

Qu'est-ce que je fais de mal?

222
demandé sur Willi Mentzel 2009-06-13 13:28:02

19 réponses

vous pouvez utiliser une règle de réécriture qui utilise ^ $ pour représenter la racine et réécrire cela à votre répertoire / store, comme ceci:

RewriteEngine On
RewriteRule ^$ /store [L]
249
répondu 2009-08-25 13:43:35

j'ai été surpris que personne n'ait mentionné ceci:

RedirectMatch ^/$ /store/

fondamentalement, il redirige la racine et seulement L'URL racine. La réponse provient de ce lien

115
répondu Dio Phung 2017-04-13 12:13:44

essayez ceci:

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

si vous voulez une redirection externe (qui fait que le navigateur en visite montre L'URL redirigée), mettez le drapeau R là aussi:

RewriteRule ^$ /store [L,R=301]
103
répondu Gumbo 2016-03-25 11:59:13

Voici ce que j'ai utilisé pour rediriger vers un sous-répertoire. Cela l'a fait de manière invisible et permet toujours les requêtes qui correspondent à un fichier existant ou autre.

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?site.com$
RewriteCond %{REQUEST_URI} !^/subdir/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /subdir/
RewriteCond %{HTTP_HOST} ^(www.)?site.com$
RewriteRule ^(/)?$ subdir/index.php [L]

changement site.com et subdiviser avec vos valeurs.

75
répondu Jage 2011-04-26 17:02:55

une autre alternative si vous voulez réécrire L'URL et cacher L'URL d'origine:

RewriteEngine on
RewriteRule ^(.*)$ /store/ [L]

avec ceci, si vous tapez par exemple http://www.example.com/product.php?id=4 , il ouvrira de manière transparente le fichier à http://www.example.com/store/product.php?id=4 mais sans montrer à l'utilisateur l'url complète.

20
répondu gaborous 2013-03-05 01:19:19

pour définir une redirection invisible de root vers subfolder, vous pouvez utiliser la directive RewriteRule suivante dans /root/.htaccess:

RewriteEngine on

RewriteCond %{REQUEST_URI} !^/subfolder
RewriteRule ^(.*)$ /subfolder/ [NC,L]

la règle ci-dessus redirigera intérieurement le navigateur de:

à

et

à

pendant que le navigateur reste dans le dossier racine.

18
répondu starkeen 2016-03-05 15:17:19

cela semblait la solution la plus simple:

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

je recevais des boucles de redirection avec d'autres solutions.

13
répondu user1801050 2012-11-05 19:06:11

Je ne comprends pas votre question...

si vous voulez rediriger chaque requête vers un sous-dossier:

RewriteRule ^(.*)$ shop/ [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/ [L,QSA]

http://www.example.com/* -> wwwroot/example.com/*
8
répondu inf3rno 2013-06-15 21:57:06

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

RewriteEngine on
RewriteCond %{REQUEST_URI} ^/$
RewriteRule (.*) http://www.example.com/store [R=301,L]
6
répondu Nir O. 2011-11-15 10:56:15

la plupart des solutions ci-dessus sont correctes mais elles manquent toutes la transparence de la redirection.

dans mon cas, lors de la visite www.example.com je voulais être redirigé vers le sous-répertoire / store mais sans mettre à jour L'URL vers www.example.com/store . (tout ce que je veux est d'obtenir le code de la page de formulaire de ce répertoire). Si c'est votre cas, la solution ci-dessous fonctionne parfaitement.

RewriteEngine on
RewriteCond %{HTTP_HOST} example\.com [NC]
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^(.*)$ /store/ [L]

source: http://wiki.dreamhost.com/Transparently_redirect_your_root_directory_to_a_subdirectory

5
répondu Mahmoud Zalt 2015-08-04 04:37:09

auparavant j'utilise le code suivant qui fonctionne correctement pour rediriger L'URL racine de chacun de mes domaines/sous-domaines vers leurs sous-répertoires de correspondance qui sont nommés exactement comme le sous-domaine qu'il est comme ci-dessous:

RewriteCond %{HTTP_HOST} ^sub1.domain1.com
RewriteCond %{REQUEST_URI} !subs/sub1.domain1.com/
RewriteRule ^(.*)$ subs/%{HTTP_HOST}/ [L,QSA]

RewriteCond %{HTTP_HOST} ^sub2.domain1.com
RewriteCond %{REQUEST_URI} !subs/sub1.domain2.com/
RewriteRule ^(.*)$ subs/%{HTTP_HOST}/ [L,QSA]

RewriteCond %{HTTP_HOST} ^sub1.domain2.com
RewriteCond %{REQUEST_URI} !subs/sub1.domain2.com/
RewriteRule ^(.*)$ subs/%{HTTP_HOST}/ [L,QSA]

RewriteCond %{HTTP_HOST} ^sub2.domain2.com
RewriteCond %{REQUEST_URI} !subs/sub2.domain2.com/
RewriteRule ^(.*)$ subs/%{HTTP_HOST}/ [L,QSA]

cependant, si je veux ajouter un autre sous ou domaine, il devra être ajouté dans le code ci-dessus. Il devrait être beaucoup plus pratique de le simplifier pour travailler comme joker ( * ) comme ci-dessous:

RewriteCond %{HTTP_HOST} ^sub
RewriteCond %{REQUEST_URI} !/subs/
RewriteRule ^(.*)$ subs/%{HTTP_HOST}/ [L,QSA]

ainsi chaque fois qu'un autre sous-domaines/domaines est ajouté aussi longtemps que le nom du sous-domaine a un préfixe de sub (comme: sub3.domain1.com, sub1.domain3.com etc. le code reste valable.

4
répondu Chetabahana 2016-02-16 22:38:09

On peut utiliser Rediriger trop à cette fin

Redirect 301 / www.example.com/store

Ou Alias pour la cartographie

Alias / /store

Edit: mod_alias n'est applicable que dans httpd.conf.

Réfrences

4
répondu Abhishek Gurjar 2017-02-08 07:10:22

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 par strictement sample.com, donc www.sample.com ça ne correspond pas.

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

  • aucune des règles incluses rediriger à l'url que vous avez spécifié dans votre but (de plus, sample est mal orthographié comme samle, mais c'est hors de propos).

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/ [R=301,L]

RewriteCond %{HTTP_HOST} ^(.+)\www.sample\.com$
RewriteRule ^/(.*)$ /samle/%1/ [L]
3
répondu Artem Russakovskii 2009-06-13 09:40:47

un petit googling, me donne ces résultats:

RewriteEngine On

RewriteBase /

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

cela redirigera toute tentative de accédez à un fichier nommé index.quelque chose à votre sous-dossier, si le fichier existe ou pas.

Ou essayez ce qui suit:

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 sais pas si cela va fonctionner.

3
répondu Steven 2009-06-13 09:42:37

essayez d'utiliser en dessous des lignes dans htaccess

Remarque: vous pouvez avoir besoin de vérifier quel est le nom de la valeur par défaut.html

par défaut.le html est le fichier à charger par défaut dans le dossier racine.

RewriteEngine

Redirect /default.html http://example.com/store/

1
répondu Abouasy 2013-02-14 07:12:50

deux solutions possibles pour y parvenir sont: 1. Créer un fichier .htaccess dans le dossier racine comme sous (il suffit de remplacer example.com et my_dir avec les valeurs correspondantes):

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/my_dir/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /my_dir/
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteRule ^(/)?$ my_dir/index.php [L] 
</IfModule>
  1. utiliser RedirectMatch pour rediriger uniquement l'URL racine" / "vers un autre dossier ou URL,

    RedirectMatch ^ / $ http://www.example.com/my_dir

1
répondu Mushtaq Hussain 2017-07-07 09:23:10

vous venez d'ajouter ce code dans votre .fichier htaccess

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /folder/index.php [L]
</IfModule>
0
répondu karthikeyan ganesan 2017-08-22 16:33:38

je vais répondre à la question d'origine non pas en pointant une autre syntaxe possible (il y en a beaucoup parmi les autres réponses) mais en pointant quelque chose que j'ai eu une fois à traiter, qui m'a pris un certain temps pour comprendre:

What am I doing wrong?

il est possible que %{HTTP_HOST} ne soit pas correctement peuplé, ou pas du tout. Bien que, j'ai seulement vu que se produire dans une seule machine sur un hôte partagé, avec un certain apache patché personnalisé 2.2, c'est une possibilité néanmoins.

0
répondu Μάκης Παλάσης 2018-03-21 10:13:14

cela va essayer le sous-DIR si le fichier n'existe pas dans la racine. J'avais besoin de ça quand j'ai bougé une base .site Web html qui s'attend à être exécuté au niveau de la racine et poussé à un sous-DIR. Ne fonctionne que si tous les fichiers sont plats (no .htaccess de la tricherie dans le sous répertoire possible). Utile pour des choses liées comme les fichiers css et js.

# Internal Redirect to subdir if file is found there.
RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-s
RewriteCond %{DOCUMENT_ROOT}/subdir/%{REQUEST_URI} -s
RewriteRule ^(.*)$ /subdir/ [L]
0
répondu mikeytown2 2018-03-26 07:48:22