web-dev-qa-db-fra.com

Comment ajouter une règle de redirection personnalisée pour les sous-domaines?

J'essaie d'écrire une règle de redirection personnalisée pour rediriger un nom de sous-domaine vers la page correspondante.

Exemple: wppage.example.comexample.com/wppage

J'utilise le code suivant dans mon functions.php:

function custom_rewrite_basic() {
    $rewrite = add_rewrite_rule('([^/]+)/?$', 'index.php?pagename=$matches[1]', 'top');
}

add_action('init', 'custom_rewrite_basic');

J'ai également ajouté une redirection générique pour tous les sous-domaines de mon DNS et vérifié que mon .htaccess possède les règles par défaut de WordPress mod_rewrite .

Je ne sais pas pourquoi, mais je continue à être redirigé vers ma page d'accueil.

Qu'est-ce que je fais mal?

1
hitautodestruct

Il est préférable de ne pas utiliser ces règles de redirection de sous-domaine dans WordPress:

  1. WordPress risque de ne pas se charger correctement lorsque vous y accédez avec un nom de domaine ou un sous-domaine incorrect, car une installation WordPress typique est configurée pour s'exécuter pour un domaine ou un sous-domaine particulier.

  2. Même si vous êtes en mesure de le faire fonctionner, WordPress se chargera tout d'abord lui-même avant chaque redirection, puis effectuera la redirection, puis le chargement à nouveau lorsque l'URL redirigée atteindra le serveur. C'est un processus lent.

Au lieu de cela, faites-le dans .htaccess. Comme ce qui suit:

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

# custom rules for subdomain matching
RewriteCond %{HTTP_Host} ^([^.]+)\.example\.com$ [NC]
RewriteRule . http://example.com/%1 [R=301,L]

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

Cela redirigera tous les sub.example.com vers example.com/sub.

Note: _ Le code ci-dessus redirigera également www.example.com vers example.com/www. Si vous ne le souhaitez pas, modifiez la section # custom rules for subdomain matching ci-dessus comme suit:

# to redirect www.example.com/* to example.com/*
RewriteCond %{HTTP_Host} ^www\.example\.com$ [NC]
RewriteRule ^(.*)$ "http://example.com/$1" [R=301,L]
# custom rules for subdomain matching
RewriteCond %{HTTP_Host} ^([^.]+)\.example\.com$ [NC]
RewriteRule . http://example.com/%1 [R=301,L]

Lire ce doc. pour en savoir plus sur Apache mod_rewrite.

Assurez-vous également que mod_rewrite EST ACTIVÉ POUR .htaccess sur votre serveur.

0
Fayaz