web-dev-qa-db-ja.com

/ wpパスでWordPressをインストールすると、index.htmlがショッピングカートにリダイレクトされるときにリダイレクトループが発生します

私のサイトでは、ショッピングカートはexample.com/zc2にあります

この.htaccessファイルを使用します

RewriteEngine On

Redirect /index.html example.com/zc2/

example.comに到達した人は誰でも私のショッピングカートにリダイレクトされます。

すべて良好ですが、example.com/wpでWordPressをインストールしようとすると、ブラウザーがリダイレクトループでスタックします。

私はそれが私の巧妙に作成された.htaccessファイルだと確信しています。

これを修正するにはどうすればよいですか?

2
Monkeybus
RewriteEngine On

Redirect /index.html example.com/zc2/

脇:これはあなたの質問の「タイプミス」でなければならないが、このmod_alias Redirectディレクティブは完全に無効です(ターゲットURLからプロトコルが欠落しています)-これはあなたの500内部サーバーエラーのあるサーバー-「非URLにリダイレクト」!?

また、RewriteEngine(mod_rewrite)とRedirect(mod_alias)は、異なるApacheモジュールからの無関係なディレクティブです。

これを修正するにはどうすればよいですか?

ただし、.htaccessサブディレクトリのWordPress /wpファイルの設定ミスが原因で、「リダイレクトループ」が発生する可能性があります。 /wpサブディレクトリではなく、不注意でドキュメントルートに書き戻している場合、リダイレクトループが発生します。

Redirectディレクティブも「prefix-matching」です。これは、で始まるソースURLと一致するURLに一致します。特定のパス(ドキュメントルートなど)をリダイレクトする場合は、代わりにRedirectMatchディレクティブ(またはmod_rewrite RewriteRule-後述)を使用することをお勧めします。例えば:

RedirectMatch 302 ^/(index\.html)?$ https://example.com/zc2/

これは/(または/index.html)のみに一致し、example.com/zc2/にリダイレクトします。

代わりにmod_rewrite(RewriteRule)を使用する

ドキュメントルート.htaccessファイル内のmod_aliasディレクティブ(RedirectまたはRedirectMatch)は、サブディレクトリに他の.htaccessファイルがある場合(つまり、WordPress /wp/.htaccessファイル)。

ルート.htaccessファイルのredirectがWordPressインストールに干渉することを回避するには、mod_alias Redirect(またはRedirectMatch)を変更します。ドキュメントルート.htaccessファイルでmod_rewrite RewriteRuleに代わりに。

例えば:

RewriteEngine On

RewriteRule ^(index\.html)?$ https://example.com/zc2/ [R=302,L]

.htaccessにあるWordPress /wp/.htaccessファイル内のmod_rewriteディレクティブは、(ドキュメントルート内の)親.htaccessファイル内のmod_rewriteディレクティブを完全にオーバーライドします。紛争の。ルート.htaccessファイルのmod_rewriteディレクティブは処理されません。

(これはApacheのデフォルトの動作に依存していることに注意してください。mod_rewriteディレクティブはinheritedではありません。)

Mod_alias Redirectが使用される場合、親.htaccessファイルのmod_aliasディレクティブは処理されます(一致するかどうかは別の問題です)-競合の可能性。

example.com/にアクセスすると、example.com/zc2/へのリダイレクトが引き続き発生します。

上記の302(一時)リダイレクトを使用したことに注意してください。これらを301(永続)に変更します-それが意図の場合-正常に動作していることを確認した場合のみ。これは、潜在的なキャッシュの問題を回避するためです。

1
MrWhite

ベースをサブフォルダにリダイレクトするだけなので、リダイレクトルールや条件を使用する必要はありません。したがって、サブフォルダもリンクされている場合、リダイレクトは必要ありません。

/.htaccessファイルでこのようなことを試してください:

Redirect 301 / https://example.com/zc2/

それからあなたの/WordPress/.htaccessファイルに:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /WordPress/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
0
Simon Hayter