2017-02-20 4 views
0

Je travaille sur une page multilingue mais j'ai un problème avec les sous-domaines.Sous-domaine de redirection PHP vers le domaine principal

Je veux utiliser l'URL en.example.com et je veux lire tout de example.com/index.php (et de l'image définie, racine CSS- comme example.com) Mais dans le navigateur Je veux encore URL en.example.com et toutes les données sont lues de example.com et ne peut pas définir ou modifier un chemin relatif pour les images, comprend, CSS ... Parce que maintenant j'ai une URL pour plus de langue (mettre en session et les cookies) et ce n'est pas une bonne solution pour google. Et je veux le changer avec le plus petit impact sur le code.

c'est possible? par exemple htaccess ou d'une autre manière? Merci de votre réponse.

Roman

ajouter:

i essayer

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{HTTP_HOST} ^en.example.com$ [OR] 
    RewriteCond %{HTTP_HOST} ^www.en.example.com$ 
    RewriteRule (.*)$ http://www.example.com/$1 [R=301,L] 
</IfModule>  

mais ce changement d'adresse URL de code.

merci de l'aide

+0

'htacees' si vous voulez dire' htaccess' alors oui. htaccess peut rediriger sans changer l'URL dans le navigateur. – JustOnUnderMillions

+0

Oui, je veux dire htaccess (désolé pour l'anglais). – Roman

Répondre

0

mod_rewrite aide à deux choses, et récrire redirect.

  • Il est appelé réécriture, lorsqu'une demande est modifiée en interne, sans que le client s'en aperçoive.
  • Il est appelé redirection, lorsqu'une requête est modifiée et que le client est averti, pour extraire la ressource d'un autre emplacement.

Une requête est redirigée dans deux cas

  • un RewriteRule a annexé un drapeau R|redirect, comme dans

    RewriteRule (.*)$ http://www.example.com/$1 [R=301,L] 
    
  • ou quand une URL cible de RewriteRule est une URL absolue pointant vers un autre hôte, p.ex. lorsque la demande est pour en.example.com et la cible est

    RewriteRule (.*)$ http://www.example.com/$1 [L] 
    

Donc, si vous voulez garder l'URL demandée sans changement dans le navigateur, vous ne devez pas utiliser un drapeau R et vous ne devez pas changer la partie hôte.

Si vous avez vraiment besoin de mapper un serveur distant, vous pouvez essayer le P|proxy drapeau

RewriteRule ^(.*)$ http://www.example.com/$1 [P] 

Pour que cela fonctionne, le module mod_proxy doit être activé.

Notez également la mise en garde de la performance

avertissement de performance
L'utilisation de ce drapeau déclenche l'utilisation de mod_proxy, sans manipulation de connexions persistantes. Cela signifie que la performance de votre procuration sera mieux si vous réglez avec ProxyPass ou ProxyPassMatch

+0

Je l'essaie mais ça ne marche pas correctement. L'URL a toujours été modifiée en www.example.com – Roman

0

-je essayer

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{HTTP_HOST} ^en.example.com$ [OR] 
    RewriteCond %{HTTP_HOST} ^www.en.example.com$ 
    RewriteRule (.*)$ http://www.example.com/$1 [L] 
</IfModule> 

mais toujours changer URL pour http://www.example.com de www.en.example.com

1

Vous probablement vouloir inclure le fichier php de l'autre virtualhost:

<?php 
require '../../example.com/public_html/index.php'; 
?> 

Cela permettra ce que vous voulez, mais ce n'est pas toujours possible en fonction de votre configuration VirtualHost. Cet exemple devrait fonctionner si vous exécutez tous les domaines sous le même utilisateur DirectAdmin.

+0

Je l'ai essayée en premier, mais le problème est relatif au chemin des images et des fichiers CSS. – Roman

+0

Utilisez les chemins d'accès absolus pour les fichiers d'actifs ou utilisez base href. – vinz

+0

Vous pouvez également créer un lien symbolique avec le répertoire d'actifs. C'est un peu sale mais cela économise beaucoup de travail en modifiant les chemins et cela empêche les requêtes http supplémentaires provoquées par les redirections htaccess. – vinz