web-dev-qa-db-fra.com

301 Rediriger un domaine vers un autre domaine tout en conservant les mêmes sous-répertoires

Est-il possible de configurer un domaine (http://x.com) (DNS/.htaccess/else?) À rediriger vers un autre domaine (http://y.com), alors que si vous naviguez http://x.com/subdir/index.html, vous ' d voyez les fichiers dans le sous-répertoire de http://x.com?

résumé
comment:
x.com -> y.com (redirection)
x.com/sub/index.html -> x.com/sub/index.html (pas de redirection)

tilisation du cas
J'ai sanderschaeffer.nl et iscs.nl, qui sont tous deux mes noms commerciaux. L'un est mon nom personnel, l'autre mon nom de marque. Lorsqu'un utilisateur accède à sanderschaeffer.nl, le domaine doit être transféré (301) vers iscs.nl. Cependant, quand on tape (par exemple) sanderschaeffer.nl/clientTestSite/ il resterait à cet endroit. Ainsi, seul le niveau supérieur obtient une redirection 301, mais taper dans le domaine supérieur, y compris un sous-répertoire, n'entraînera aucune redirection .

Pour quelqu'un qui dit 'Pourquoi n'utilisez-vous pas les sites de test dans un sous-répertoire du site principal (iscs.nl/)?'; c'est parce que je teste (temporairement) un nouveau serveur sur lequel sanderschaeffer.nl est actuellement hébergé. :)

3
Sander Schaeffer

En supposant que vous vouliez dire "sous-répertoire" et non pas "sous-domaine" (selon vos exemples), essayez alors quelque chose de similaire dans le fichier .htaccess à l'adresse x.com:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/sub/
RewriteRule (.*) http://y.com/$1 [R=301,L]

Redirige (301) le tout vers y.com où l'URI ne commence pas avec /sub/.

Notez que ceci redirige vers l'URL correspondante sous y.com, ainsi, par exemple, http://x.com/foo/bar redirige vers http://y.com/foo/bar. (Plutôt que de rediriger littéralement uniquement x.com/ vers y.com/?)

PDATE # 1: À la lumière des commentaires ci-dessous, ce qui suit pourrait suffire. Cela redirige http://x.com/ (et uniquement l'URL racine) vers y.com. Tout le reste, par exemple. x.com/something reste à x.com.

RewriteEngine On
RewriteRule ^$ http://y.com/ [R=301,L]

Notez cependant que cela ne vérifie pas spécifiquement la présence d'un sous-répertoire valide . Tout composant de chemin dans l'URL restera dans l'URL x.com.

Si vous avez spécifiquement besoin de vérifier les sous-répertoires valides/connus, j'utilise une directive RewriteCond comme dans le premier exemple ci-dessus.

PDATE # 2: Une autre possibilité est de vérifier tout ce qui ressemble à un sous-répertoire, c'est-à-dire. /anything/ et redirige sinon. Par exemple:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/[a-z0-9_-]+/
RewriteRule (.*) http://y.com/$1 [R=301,L]

Ceci redirigera x.com/ vers y.com/ et x.com/file vers y.com/file, mais ne redirigera pas x.com/subdir/file.php.

4
MrWhite