web-dev-qa-db-ja.com

サブドメインからすべての子ページをリダイレクトする

このリダイレクトを機能させることができません...誰かが私を正しい方向に向けることができますか?

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

何らかの理由で動作しないでください。私が得た最高の結果は、親ドメインの「ページが見つかりません」ページにページをリダイレクトすることです!

明らかにここに何かが欠けていますか?

5
colic

WordPressサイト

WordPressはmod_rewriteを使用してURLルーティング(きれいなURL)を処理します-これを使用していると仮定します-したがって、このインスタンスではmod_aliasリダイレクト(RedirectRedirectMatchなど)を使用しないでください。 (異なるモジュールは、.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でドメインを指定する場合は、プロトコルなどを使用して絶対ドメインにする必要があります。

3
MrWhite