WordPressの.htaccessを編集してURLを正規化

今回は、サイト運営上の問題として、WordPressを使う場合のURLの正規化について書きます。

URLの正規化について

しなぷすのハード製作記のサイトと、このブログは、共に常時SSLを採用しています。そのため、URLが

https://synapse.kyoto

で始まっているのですが、

http://synapse.kyoto

でアクセスすると、サーバーのデフォルトの設定では、表示される内容が同じままに、SSLなしでアクセスできてしまいます。

また、www.のサブドメインを付けて

https://www.synapse.kyoto

としても、サーバーの初期設定のままでは、同じ内容が表示されてしまいます。

同じ内容のページを複数のURLでアクセスできると、Googleなどのサーチエンジンが、それぞれのURLを別々のページとしてインデックスしてしまい、SEO的にも良くありませんし、読者も混乱してしまいます。

そこで、httpで始まるURLやwww.付きのURLの場合は、https://synapse.kyotoにリダイレクト(転送)し、URLを正規化する必要が生じます。

.htaccessファイルでmod_rewriteを使い、httpで始まるURLやwww.付きのURLを正規のURLに301リダイレクトすれば、この問題は解決します。

.htaccessファイルを使ったURLの正規化については、ysklog【.htaccess】URLを正規化する方法(「www」と「index.html」の正規化)のページに詳しい説明があります。

広告

本サイトのmod_rewriteの設定

本サイトおよび本ブログ(http://synapse.kyoto)では、以下の様に.htaccessファイルに記述する事により、URLの正規化をしています。

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.synapse\.kyoto
RewriteRule ^(.*)$ https://synapse.kyoto/$1 [R=301,L]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

この様に記述した.htaccessファイルをサイトのルートディレクトリに配置したので、サブディレクトリへのアクセスについても、全てURLの正規化がうまくいっていました。ブログを始める前までは。

サイトにブログを追加したことにより発生した問題

/blog/ディレクトリにWordPressのブログを設置してから、状況は変わりました。ブログのディレクトリでは、まったくURLの正規化が働かなくなったのです。

調べてみると、/blog/ディレクトリに、WordPressが.htaccessファイルを設置したようです。そのため、ルートディレクトリの.htaccessファイルの設定が上書きされてしまい、URLの正規化が働かなくなったのです。

WordPressが自動的に設置した.htaccessファイルの内容を次に示します。

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

# END WordPress

この.htaccessファイルがどういう処理をしているかについては、ええかげんブログWordPressに作成される.htaccessの動作を改めて確認しておこうというページに詳しい解説があります。

WordPressの.htaccessを書き換えて対策

そこで、ブログのディレクトリの.htaccessファイルを書き換え、ブログでもURLの正規化が行われるようにしました。

この時にひとつ注意があります。WordPressの生成した.htaccessファイルは、設定変更時などにWordPressが書き換える事があるという事です。ただし、WordPressが書き換えるのは、# BEGIN WordPress# END WordPressで囲まれた部分ですので、それ以外の部分に追加の設定を書き込めばいい事になります。

最終的には、ブログのディレクトリの.htaccessファイルは以下の様になりました。

RewriteEngine On
RewriteBase /blog/
RewriteCond %{HTTP_HOST} ^www\.synapse\.kyoto/blog
RewriteRule ^(.*)$ https://synapse.kyoto/$1 [R=301,L]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# BEGIN WordPress

RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]


# END WordPress

この書き換えにより、無事ブログでもURLの正規化ができるようになりました。

http://synapse.kyoto/blog

とか、

https://www.synapse.kyoto/blog

とか、

http://www.synapse.kyoto/blog

でアクセスしても、

https://synapse.kyoto/blog

にリダイレクトされる事を確認してみてください。

広告

「WordPressの.htaccessを編集してURLを正規化」への3件のフィードバック

    1. I’m curious to find out how you found this blog despite being written in Japanese.
      Anyway, this blog operates using the WordPress. I think the WordPress is safe enough if you use it with some security protection measures. For example, the log-in page of this blog denies an access if it is made from an IP address which I never use.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

認証コード(計算結果を半角数字で入力してください) *