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.com
→ example.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?
Il est préférable de ne pas utiliser ces règles de redirection de sous-domaine dans WordPress:
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.
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
versexample.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.