2009-08-17 3 views
0

Je pense que cela est une question assez simple à mod_rewrite:mod_rewrite - redirect d'un domaine à l'autre et préserver les valeurs de fuite dans l'URL

Je suis un domaine, qui doit rediriger vers une autre, mais garder toute valeur après dernière barre oblique (/) dans la première URL, à la seconde.

domain.com/4433 devrait transférer à domain.com/folder/?p=4333

Listed pour plus de clarté:

De: domain.com/4433

Pour: domain.com/folder/?p=4333

Des idées?

Edit: fait quelques tests, nous avons trouvé la solution suivante:

RewriteCond% {HTTP_HOST}^domain.com

$

RewriteRule^([0-9a-z] *) $ ?/dossier/p = $ 1 [NC]

sincèrement, - bakkelun

+0

Voulez-vous avoir une redirection HTTP ou que le serveur le fasse en arrière-plan sans que l'utilisateur s'en aperçoive? –

+0

il devrait être fait sans que l'utilisateur ne s'en aperçoive. Mais nous avons trouvé la solution, c'était: RewriteCond% {HTTP_HOST}^domain.com $ RewriteRule^([0-9a-z] *) $/dossier /? P = $ 1 [NC] – Coreus

Répondre

0
RewriteEngine On 
RewriteCond %{QUERY_STRING} ^$ 
RewriteRule ^(.*)$ domain.com/folder?p=$1 [R=301,L] 
+0

Si les deux les domaines fonctionnent avec le même vhost, alors cela donnera une boucle de redirection sans fin. – Residuum

+0

@Residuum: Pas seulement dans ce cas. Le * Substitution * est juste un chemin relatif. Donc '/ 4433' serait redirigé vers' /domain.com/folder? P = 4433' qui serait redirigé vers '/domain.com/domain.com/folder? P = domain.com/folder' qui serait redirigé à '/domain.com/domain.com/domain.com/folder? p = domain.com/domain.com/folder' etc – Gumbo

+0

Merci les gars de commenter ma réponse insouciante. J'ai essayé de mettre (peut-être un autre insouciant) correctif. Je suppose que la vraie solution dépendrait alors de la façon dont l'ensemble complet des URL valides cherchera le domaine. – Zed

0

Juste au cas où: domain.com = domain1.com et domain2.com? domain1.com devrait être redirigé vers domain2.com? Les deux fonctionnent sur le même serveur (facultatif)?

[EDIT:]

Si vous voulez vraiment que faire la chose comme indiqué dans le commentaire, puis procédez comme suit:

RewriteEngine On 

RewriteCond %{HTTP_HOST} ^domain1.com$ 
RewriteRule ^4433$ http://domain2.com/folder/?p=4433 [R=301,L] 

Sinon, comme l'a dit Benedikt Eger, ou R = 301 si vous voulez une vraie redirection. Ou, si vous le voulez rediriger uniquement sur le nombre, puis procédez comme suit:

RewriteEngine On 

RewriteCond %{HTTP_HOST} ^domain1.com$ 
RewriteRule ^([0-9])+$ http://domain2.com/folder/?p=$1 [R=301,L] 

chèques RewriteCond, si vhost est défini domain1.com, mais pas domain2.com, la règle de réécriture est appliquée, et redirections via l'état HTTP 301 [R = 301] uniquement les chaînes de nombres (0-9) + consistant en au moins un nombre à l'URL spécifiée. [L] fait de ceci la dernière règle appliquée.

+0

Peut-être j'ai oublié de le mentionner, mais SEULEMENT accès au domaine/4433 devrait rediriger vers domain.com/folder/?p=4333 "domain.com" seul ne doit pas rediriger. – Coreus

+0

Vous avez mélangé quelque chose. '[(0-9) +]' devrait plutôt être '([0-9]) +'. – Gumbo

+0

Merci, Gumbo. J'ai corrigé cette faute de frappe/thinko. – Residuum

0

Dans le cas où vous ne voulez pas vraiment rediriger mais d'avoir de jolies URL, vous pouvez utiliser

RewriteEngine On 
RewriteRule ^/(.+)$ /folder?p=$1 [L] 

Cela prend tout après la première barre oblique et il insère au 1 $ - mais seulement s'il y a quelque chose après la barre oblique. Il n'émet pas de redirection afin que les utilisateurs ne s'en aperçoivent pas.

0

Sans plus d'informations, essayez ceci:

RewriteEngine on 
RewriteRule ^/([^/]+)$ /folder/?p=$1 

Si vous voulez utiliser la règle dans un fichier .htaccess, retirez les barres obliques de premier plan.