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 what blog system you happen to be using?
    I’m having some minor security issues with my latest website and
    I’d like to find something more safeguarded. Do you have any suggestions? http://yahoo.co.uk

    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.

しなぷす へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。

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