今回は、サイト運営上の問題として、WordPressを使う場合のURLの正規化について書きます。
URLの正規化について
しなぷすのハード製作記のサイトと、このブログは、共に常時SSLを採用しています。そのため、URLが
で始まっているのですが、
でアクセスすると、サーバーのデフォルトの設定では、表示される内容が同じままに、SSLなしでアクセスできてしまいます。
また、www.のサブドメインを付けて
としても、サーバーの初期設定のままでは、同じ内容が表示されてしまいます。
同じ内容のページを複数の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の正規化ができるようになりました。
とか、
とか、
でアクセスしても、
にリダイレクトされる事を確認してみてください。
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
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.
Ahaa, its pleasant conversation concerning this paragraph
at this place at this weblog, I have read all that, so at this
time me also commenting here. http://yahoo.net