ブログ用に新しいサブドメインを作成したので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
どんな助けでも感謝します!
... 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ディレクティブを実行します。
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]