web-dev-qa-db-ja.com

WordPressサイトの.htaccessファイルで301リダイレクトを配置する場所

以前に.htaccessファイルを編集して、wwwバージョンからwww以外のバージョンにリダイレクトしましたが、正常に機能しています。しかし、今私はする必要があるいくつかのページリダイレクトがあります。 .htaccessファイルを見ていますが、実際のリダイレクトコードを配置する場所がわかりません。WordPressサイトがあります。それは最後に行くのですか、それともWordPressと言う領域に行くのですか?これが私の.htaccessファイルです:

# Use PHP5.4 as default
# Changed PHP handler from application/x-httpd-php54 to application/x-httpd-phpbeta
# on Thu Dec 17 16:50:26 MST 2015.
AddHandler application/x-httpd-phpbeta .php

RewriteEngine on
RewriteCond %{HTTP_Host} ^www\.example\.com$
RewriteRule ^/?$ "http\:\/\/example\.com\/" [R=301,L]

# 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
1
techygal
# Use PHP5.4 as default
# Changed PHP handler from application/x-httpd-php54 to application/x-httpd-phpbeta on Thu Dec 17 16:50:26 MST 2015.
AddHandler application/x-httpd-phpbeta .php

# BEGIN WordPress
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    # Insert redirect based rewrites here.
    # Example: RewriteRule ^redirectme$ http://example.com/redirectme [R=301,L]
    #
    RewriteCond %{HTTP_Host} ^www\.example\.com$
    RewriteRule ^/?$ "http\:\/\/example\.com\/" [R=301,L]
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>

# END WordPress

.htaccessファイルを少し変更しました。最初に、書き換えルールはIfModuleブロック内にある必要があります。サーバー管理者が後でApacheからmod_rewriteを削除した場合、コードはシステムを破壊せず、代わりに無視されるためです。

また、リダイレクトを配置するのに最適な場所を確認するには、コードを確認してください。レイテンシーを最小限に抑えるためにそこに提案しました。ルールは上から下の順にチェックされます。

2
Mike

重要なことは、外部(mod_rewrite[* 1])リダイレクトbefore WordPress内部の書き換え(マイクが答えで示唆しているように)。

WordPressの書き換えは、「すべてをキャッチ」して書き換えるすべてです。したがって、WordPressブロックの後にリライト/リダイレクトを配置すると、それらは単に無視されます。

RewriteCond %{HTTP_Host} ^www\.example\.com$
RewriteRule ^/?$ "http\:\/\/example\.com\/" [R=301,L]

(置換における不必要なエスケープの過剰を除いて)、これは完全ではありません。これは、リクエストをサイトルートにリダイレクトするだけです。おそらくwww.example.com/<whatever>example.com/<whatever>にリダイレクトしたいでしょうか?その場合、代わりに次のようなものが必要です(.htaccess内):

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

(WordPress構成で優先ドメインも設定していますか?)


[* 1] リダイレクトにmod_alias Redirect(またはRedirectMatch)ディレクティブを使用している場合、WordPressフロントコントローラーに関連してリダイレクトを配置した場所は厳密には重要ではないことに注意してください。 (mod_rewrite、つまりRewriteCondおよびRewriteRuleディレクティブを使用します)。これは、設定ファイル内の位置に関係なく、mod_alias(Redirect/RedirectMatch)ディレクティブが常に処理されるためです(mod_rewrite/RewriteRuleの後)。

2
MrWhite