web-dev-qa-db-ja.com

/ blogの301がブログのサブドメインにリダイレクトされない

ブログ用に新しいサブドメインを作成したのでblog.example.com-以前はwww.example.com/blogだったので、古い/blogのすべての投稿から新しいblog.example.com URLへの301リダイレクトを作成しようとしています。 htaccessに次のコードを配置しました。

RewriteEngine On
RewriteCond %{HTTP_Host} ^www\.example\.com$
RewriteRule ^blog/(.*)$ http://blog.example.com/$1 [L,R=301]

ただし、htaccess# END Wordpressの後に配置しますか、それとも何かが足りませんか? htaccessファイルのどこにこのコードを配置しますか、それとも正しいコードですか?

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

# END WordPress

または書き出す必要がありますか

Redirect 301 /blog/example-post http://blog.example.com/example-post

どんな助けでも感謝します!

4
jenna

... htaccessの# END Wordpressの後に配置しますか、それとも何か不足していますか?

いいえ。外部リダイレクトはbefore# BEGIN WordPressコードブロックに来る必要があります。すなわち。 WPが内部的にリクエストを書き換える前。

配置した場合after WPコードブロックは、WPが既にリクエストをルーティングしているため、単に無視されます。

それ以外の場合、古い/blog/ URLの末尾に常に「ブログルート」へのスラッシュがあり、blogサブドメインはメインドメインと同じファイルシステム上の場所を指し、ドメインはすでに正規化されています(つまり、wwwサブドメインを介してのみアクセスできます)。

 Redirect 301 /blog ....

RewriteRule(つまりmod_rewrite)とRedirect(つまりmod_alias)ディレクティブを混在させないでください。これらの2つのディレクティブは異なるモジュールに属しているため、リクエスト中にdifferent timesで実行され、注意しないと混乱を招く可能性があります。したがって、すでにmod_rewrite(WordPressディレクティブ)を使用しているので、リダイレクトにはmod_rewriteを使用し続ける必要があります。

Redirectを設定ファイルに配置しても構いません-after mod_rewriteディレクティブを実行します。

5
MrWhite

mod_alias を使用してこのようなものが欲しい

Redirect permanent /blog http://blog.example.com/

キーワードpermanentは、Apacheが302 Foundではなく301 Moved PermanentlyのHTTPステータスを送信するようにします。

あなたの方法を使用するには、これを試すことができます

RewriteEngine on

RewriteCond %{HTTP_Host} ^(www\.)?example\.com$
RewriteRule ^blog/(.*)$ http://blog.example.com/$1 [L,QSA,R=301]

RewriteCond %{HTTP_Host} ^blog\.example\.com$
RewriteCond %{REQUEST_URI} !^blog/
RewriteRule ^(.*)$ /blog/$1 [L,QSA]
2
norcal johnny