このリダイレクトを機能させることができません...誰かが私を正しい方向に向けることができますか?
WordPressサイトで、特定の親ページの下にあるすべてのページへのアクセスを禁止したい。人々に見せたいのは、その親ページだけです。
したがって、example.com/subdomain/parent-page
が次の要素で構成されている場合:
parent-page
parent-page/sub-page-1
parent-page/sub-page-2
...and so on
一致するすべてのサブページをexample.com/subdomain/parent-page
にリダイレクトする必要があります。
私の。htaccessファイルはexample.com/subdomain
のルートフォルダーにあります。
正規表現を使用できるようにするには、RedirectMatch
が必要だと思います。
しかし、私のすべてのバリエーション:
RedirectMatch 301 parent-page/?* example.com/subdomain/parent-page
何らかの理由で動作しないでください。私が得た最高の結果は、親ドメインの「ページが見つかりません」ページにページをリダイレクトすることです!
明らかにここに何かが欠けていますか?
WordPressサイト
WordPressはmod_rewriteを使用してURLルーティング(きれいなURL)を処理します-これを使用していると仮定します-したがって、このインスタンスではmod_aliasリダイレクト(Redirect
、RedirectMatch
など)を使用しないでください。 (異なるモジュールは、.htaccessファイル内のディレクティブの順序に関係なく、異なる時間に実行されるため、予期しない結果/競合が発生する可能性があります。mod_rewrite 通常 mod_aliasの前に実行されます。)
.htaccessではexample.com/subdomain/parent-page/<anything>
をリダイレクトするのは簡単ですが、そのページが存在しないときに既存のWordPressページと404のみをリダイレクトする場合は、より複雑で、おそらく_を探す必要がありますWP .htaccessではなくソリューション。
example.com/subdomain/.htaccess
ファイルの上部で次のようなものを試してください。これらのディレクティブはbefore既存のWordPressルーティングディレクティブに来る必要があります。
RewriteEngine On
RewriteRule ^parent-page/. /subdomain/parent-page [R=302,L]
302
(一時的)リダイレクトを301
(永続的)に変更します(正常に機能していることが確認できたら)。 (301はブラウザによってキャッシュされるため、テストに問題が生じる可能性があります。)
/subdomain/parent-page/<something>
で始まるURLはリダイレクトされます(そのサブページが存在するかどうかに関係なく)。これは、リダイレクトループの回避にも役立ちます。
RewriteEngine
は、.htaccessファイルに1回だけ表示する必要があります-できれば(より論理的に)一番上に表示してください。
RedirectMatch 301 parent-page/?* example.com/subdomain/parent-page
余談ですが、ここにはいくつか間違った点があります。正規表現は厳密には有効ではありません。 *
は、先行する文字と0回以上一致します(先行する文字は?
です。これはそれ自体がメタ文字です)。ターゲットURLでドメインを指定する場合は、プロトコルなどを使用して絶対ドメインにする必要があります。