サブドメイン名を一致するページにリダイレクトするカスタムリダイレクトルールを作成しようとしています。
例:wppage.example.com
→example.com/wppage
私はfunctions.php
で次のコードを使用しています。
function custom_rewrite_basic() {
$rewrite = add_rewrite_rule('([^/]+)/?$', 'index.php?pagename=$matches[1]', 'top');
}
add_action('init', 'custom_rewrite_basic');
また、私のDNSのすべてのサブドメインにワイルドカード転送を追加し、私の.htaccess
に デフォルトのWordPressのmod_rewrite
の規則があることを確認しました 。
理由はわかりませんが、私は自分のホームページにリダイレクトされ続けます。
何がおかしいのですか?
WordPress内でこれらの種類のサブドメインリダイレクトルールを使用しない方が良いでしょう。
通常のWordPressインストールは特定のドメインまたはサブドメインで実行されるように設定されているため、間違ったドメイン名またはサブドメインを使用してアクセスすると、WordPressが正しくロードされないことがあります。
あなたがそれを動作させることができても、すべてのリダイレクトの前にWordPressは最初にそれ自身をロードし、そして次にリダイレクトをし、そしてリダイレクトされたURLがサーバーに到達したときに再びロードするでしょう。それは遅いプロセスです。
代わりに.htaccess
で行います。次のように
# 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
これはすべてのsub.example.com
をexample.com/sub
にリダイレクトします。
注:上記のコードは
www.example.com
をexample.com/www
にもリダイレクトします。そうしたくない場合は、上記の# custom rules for subdomain matching
セクションを次のように変更してください。
# 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]
Apache mod_rewrite
についてもっと学ぶために このドキュメント を読んでください。
また、 mod_rewrite
がサーバーの.htaccess
に対して有効になっていることを確認してください。