web-dev-qa-db-fra.com

WordPress multilingues domaine et dossiers

Répondu et édité!

J'ai une seule installation Wordpress sur example.com .

J'utilise le plugin Polylang pour ajouter un système multilingue à ce site. J'ai 16 langues et il est configuré pour utiliser example.com/fr pour le français, example.com/de pour l’allemand, etc ...

Je veux utiliser un nom de domaine pour la langue coréenne et le Japon. Au lieu de example.com/jp , je souhaite obtenir le site Web sur example.jp .

J'essaie de trouver un moyen de faire cela avec .htaccess sans déplacer les autres langues sur des sous-domaines ou des domaines.

Voici ce que j'ai, mais si je vais à example.jp/page/ je suis redirigé vers example.com/ja/page/ , connaissez-vous un moyen de masquer cette redirection?

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_Host} ^(www\.)?example\.jp$
RewriteRule (.*) http://example.com/ja/$1 [R=302,L]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

Une autre information si vous avez besoin, le domaine utilise CNAME et je suis sur un WP hébergement de moteur. En ce qui concerne les permaliens, je pourrai les passer dans un filtre pour effacer le système actuel de liens de sous-répertoires.

Merci pour votre temps !

EDIT: Comme expliqué dans la réponse, le système de fichiers CNAME et le serveur me fournissent tout ce dont j'ai besoin. Je n'ai pas besoin d'utiliser .htaccess pour réaliser ce que je recherche.

Si vous avez déjà mis à jour les liens internes et que example.jp pointe au même endroit sur le système de fichiers que example.com (via CNAME et les modifications de configuration de serveur appropriées), vous n'avez pas nécessairement besoin de rewrite to example.com, puisque example.jp accède les mêmes fichiers. Essayer de réécrire dans un autre domaine déclenchera implicitement une redirection externe (que vous spécifiiez ou non le drapeau R dans la directive RewriteRule).

Donc, pour changer ceci en une réécriture sur le domaine example.jp:

RewriteCond %{HTTP_Host} ^(www\.)?example\.jp
RewriteRule (.*) /ja/$1 [L]

(Pourquoi utilisez-vous ja dans substitution string - est-ce une faute de frappe? Ne devrait-il pas s'agir de jp comme mentionné précédemment dans votre question?)

Cependant, cela peut déclencher une boucle de réécriture, selon que vous ayez ou non d'autres directives. Donc, vous auriez probablement besoin d'ajouter une condition pour empêcher cela. Par exemple:

RewriteCond %{REQUEST_URI} !^/ja/
RewriteCond %{HTTP_Host} ^(www\.)?example\.jp
RewriteRule (.*) /ja/$1 [L]

La directive supplémentaire RewriteCond garantit que l'URL demandée (préfixe !) ne commence pas déjà par /ja/.

Cependant, il serait plus efficace d’éviter de réécrire les URL /ja/ avec une coche dans la variable RewriteRule pattern . Par exemple:

RewriteCond %{HTTP_Host} ^(www\.)?example\.jp
RewriteRule !^ja/ /ja%{REQUEST_URI} [L]

Désormais, la RewriteRule est uniquement traitée lorsque l’URL ne démarre pas /ja/, au lieu de traiter every request (c.-à-d. .*).

Cependant, WordPress peut toujours essayer de canoniser le nom d’hôte? c'est à dire. WordPress lui-même peut générer une redirection externe vers example.com. Si tel est le cas, vous devrez le remplacer dans WordPress ou implémenter un reverse proxy using mod_proxy - pour lequel vous aurez idéalement accès à la configuration du serveur.

1
DocRoot