2009-08-28 7 views
2

Je cette règle de réécriture ...Réécrire dans un nouveau domaine? avec une requête url? ne fonctionne pas. :(aider

Redirect toute demande initiale de world.example.com à web.example.com

RewriteCond %{HTTP_HOST} ^world\.example\.com$ [NC] 
RewriteCond %{HTTP_HOST} !^$ 
RewriteCond %{SERVER_PORT} !^80$ 
RewriteRule ^(.*)$ https://web.example.com$1 [R=301,L] 

Ce qui fonctionne très bien. Mais, certains de mes applications a ...

https://world.example.com/approvals/?id=b47b5256567 

Malheureusement, il n'est pas redirigés correctement web.example.com. au lieu de cela, il va juste web.example.com sans params de requête.

Comment puis-je rediriger toutes les requêtes vers web.example.com avec les paramètres de requête?

Fondamentalement, ce qu'il doit faire ...

https://world.example.com/approvals/?id=b47b5256567 
then 
https://web.example.com/approvals/?id=b47b5256567 

changeant seulement le monde web et passer la chaîne de requête.

Aide

Répondre

5

Vous n'avez pas besoin d'utiliser le moteur de réécriture compliqué pour le faire. Il suffit d'utiliser Redirect:

<VirtualHost *> 
    ServerName world.example.com 
    Redirect permanent/https://web.example.com/ 
</VirtualHost> 

La directive Redirect préserve automatiquement tout ce qui vient après ce que vous redirigez.

+0

C'est gentil. Tenez, laissez-moi essayer. Dois-je éteindre le RewriteEngine aussi? –

+0

Le RewriteEngine n'est pas utilisé par la directive Redirect, donc cela n'a pas d'importance. –

+0

J'ai compris! Ça a marché! Mais, seulement sur http. Si un lien https://world.example.com a été utilisé, il redirige vers la page principale sans la requête https://web.example.com. Je ne sais pas si cela peut être moi, mais mon monde.exemple.com (est un certificat auto-signé), pas sûr si cela est à l'origine du problème. Mais, globalement, les solutions s'adaptent facilement. Et merci. –

1

Vous avez oublié d'utiliser le drapeau "chaîne de requête Append" [R=301,L,QSA].

+0

Ouais, mais la réécriture est un peu compliqué. –

+0

Eh bien, je ne pense pas. Mais de la suggestion de Greg Hewgill couse est beaucoup plus professionnel, en supposant que vous avez accès aux fichiers de configuration du serveur. – Havenard

0

Nous pouvons le faire aussi avec Nginx.

server { 
    listen 80: 
    server_name: world.example.com  

    # URL redirect 
    #rewrite^http://web.example.com$request_uri? permanent; 
    rewrite^$scheme://web.example.com$request_uri permanent; 
    #rewrite^$scheme://web.example.com permanent; 
    #rewrite^$scheme://web.example.com; 
} 

Référence:

Questions connexes