web-dev-qa-db-ger.com

Wie füge ich eine benutzerdefinierte Umleitungsregel für Subdomains hinzu?

Ich versuche, eine benutzerdefinierte Umleitungsregel zu schreiben, um einen Unterdomänennamen auf die entsprechende Seite umzuleiten.

Beispiel: wppage.example.comexample.com/wppage

Ich verwende den folgenden Code in meinem functions.php:

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

add_action('init', 'custom_rewrite_basic');

Ich habe außerdem eine Platzhalterweiterleitung für alle Subdomains aus meinem DNS hinzugefügt und überprüft, ob mein .htaccess die Standardregeln für WordPress mod_rewrite enthält.

Ich weiß nicht warum, aber ich werde immer wieder auf meine Homepage weitergeleitet.

Was mache ich falsch?

1
hitautodestruct

Es ist besser, diese Art von Weiterleitungsregeln für Subdomains nicht in WordPress zu verwenden:

  1. WordPress wird möglicherweise nicht richtig geladen, wenn Sie mit dem falschen Domänennamen oder der falschen Unterdomäne darauf zugreifen, da eine typische WordPress-Installation für eine bestimmte Domäne oder Unterdomäne ausgeführt werden soll.

  2. Auch wenn Sie in der Lage sind, es zum Laufen zu bringen, lädt sich WordPress vor jeder Umleitung zuerst selbst und führt dann die Umleitung durch und lädt dann erneut, wenn die umgeleitete URL den Server erreicht. Das ist ein langsamer Prozess.

Tun Sie es stattdessen in .htaccess. Wie die folgenden:

# 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

Dadurch werden alle sub.example.com nach example.com/sub umgeleitet.

Hinweis:Der obige CODE leitet auch www.example.com zu example.com/www um. Wenn Sie das nicht möchten, ändern Sie den obigen Abschnitt # custom rules for subdomain matching wie folgt:

# 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]

Lesen Sie dieses Dokument. um mehr über Apache zu erfahren mod_rewrite.

Stellen Sie außerdem sicher, dass mod_rewrite FÜR .htaccess auf Ihrem Server aktiviert ist.

0
Fayaz