次のApacheリダイレクトルールを.htaccess
に追加する必要があります。
http://www.example.com
はhttp://www.onemoreexample.com
にリダイレクトされます
ただし、http://www.example.com/support
はリダイレクトしないでください。
これを実現するために、以下のリダイレクトルールを追加しました。
RewriteCond %{REQUEST_URI} !^/support/
RewriteRule ^(.*)$ http://www.onemoreexample.com/$1 [R=302,L]
しかし、上記のルールを追加した後、http://www.example.com/support/
はhttp://www.onemoreexample.com/support/
に連れて行ってくれます
上記のルールの前に、wwwにリダイレクトする次のルールもあります。
RewriteCond %{HTTP_Host} ^example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
私の.htaccessファイルは次のようになります
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]
RewriteCond %{HTTP_Host} ^example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
RewriteCond %{REQUEST_URI} !^/support/
RewriteRule ^(.*)$ http://www.onemoreexample.com/$1 [R=302,L]
これを解決する方法を提案してください。
独立して、リダイレクトディレクティブ自体は問題ないので、何か他のことが起こっているはずです...
.htaccess
ファイル全体を見て、リダイレクトディレクティブを配置した状態で、リダイレクトディレクティブが実際に何かを実行していることに驚いています(?!)。 .htaccess
ファイルの終わり、WordPressマルチサイトディレクティブの後。
/support
という物理ディレクトリ(またはファイル)がないため、WordPressはこの要求を/index.php
beforeに書き換えますリダイレクトが発生し、リダイレクトが処理される前に処理が停止します(したがって、これがリクエストをリダイレクトしているように見える方法は明らかではありません-明らかな推測は、キャッシュされたリダイレクトが表示されていることです(おそらく、以前のいくつかのテストの後)-または何か他のものそれがリダイレクトをトリガーしているのですか?)
通常、外部リダイレクトは常に.htaccess
ファイルの先頭に、before書き換えの前に配置する必要があります。したがって、.htaccess
ファイルは次のようになります。
RewriteEngine On
RewriteBase /
# External redirects...
RewriteCond %{REQUEST_URI} !^/support/
RewriteRule ^(.*)$ http://www.onemoreexample.com/$1 [R=302,L]
RewriteCond %{HTTP_Host} ^example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
# WordPress multisite rewrites...
RewriteRule ^index\.php$ - [L]
# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]
テストの前に、ブラウザのキャッシュがクリアされていることを確認する必要があります。
PDATE#1:解決するがCSSが壊れる
上記は、/support/...
URL-pathプレフィックスで参照されていない静的リソース(CSS、JS、画像)もリダイレクトします。対応するCSSファイルがリダイレクトされたドメインにもない場合、CSSは機能しなくなります。これはおそらくここで何が起こっているのでしょう...(しかし、これらが共有/共通のCSSリソースであると仮定すると、リダイレクトされたすべてのページでもこれが壊れると思いますか?/support/
ページで使用されるCSSが一意でない限り、 )。
CSSおよびその他の静的リソースを除外するには、別の例外を追加する必要があります。例えば:
# Redirect everything except "/support/..." and other static resources
RewriteCond %{REQUEST_URI} !^/support/
RewriteCond %{REQUEST_URI} !\.(css|js|jpg|gif|png)$
RewriteRule ^(.*)$ http://www.onemoreexample.com/$1 [R=302,L]
PDATE#2もう1つの問題...
http://www.example.com/support/wp-admin
もリダイレクトすべきではありませんが、http://www.onemoreexample.com/wp-login.php
にリダイレクトされています。
ここでの問題は、/support/wp-admin
が最初に/wp-login.php
にリダイレクトされることです(/support/
接頭辞なし)WordPress)によってリダイレクトされます上記のディレクティブを使用して他のドメインにアクセスするため、/wp-login.php
にアクセスする認証されていないユーザーがリダイレクトされないようにする場合は、/support/wp-admin
も例外にする必要があります。
たとえば、代わりに次のようなものを読み取るように最初の条件を変更します。
RewriteCond %{REQUEST_URI} !^/(support/|wp-login\.php$)
/?
を追加して、オプションで末尾のスラッシュもルールで考慮します。
RewriteCond %{REQUEST_URI} !^/support/?
RewriteRule ^(.*)$ http://www.onemoreexample.com/$1 [R=302,L]