web-dev-qa-db-ja.com

サブドメイン用のカスタムリダイレクトルールを追加する方法

サブドメイン名を一致するページにリダイレクトするカスタムリダイレクトルールを作成しようとしています。

例:wppage.example.comexample.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の規則があることを確認しました

理由はわかりませんが、私は自分のホームページにリダイレクトされ続けます。

何がおかしいのですか?

1
hitautodestruct

WordPress内でこれらの種類のサブドメインリダイレクトルールを使用しない方が良いでしょう。

  1. 通常のWordPressインストールは特定のドメインまたはサブドメインで実行されるように設定されているため、間違ったドメイン名またはサブドメインを使用してアクセスすると、WordPressが正しくロードされないことがあります。

  2. あなたがそれを動作させることができても、すべてのリダイレクトの前に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.comexample.com/subにリダイレクトします。

注:上記のコードはwww.example.comexample.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 に対して有効になっていることを確認してください。

0
Fayaz