.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?
19 réponses
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]
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.
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.
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.
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.
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/*
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]
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
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.
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
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]
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.
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/
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>
-
utiliser RedirectMatch pour rediriger uniquement l'URL racine" / "vers un autre dossier ou URL,
RedirectMatch ^ / $ http://www.example.com/my_dir
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>
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.
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]