ゼルダの伝説 スカイウォードソード

本日ゼルダの伝説の最新作であるWiiゼルダの伝説 スカイウォードソード』が発売されます。
ゲームは久しぶりですが、面白そうなのでやろうと思ってます。と言うよりも実はすでに昨日からやっています。近くのゲーム屋を覗いたら何故か置いてあったので買ってきました。
3Dゼルダ任天堂64の時のオカリナ以来ですが、以前と比べてリンクの動き変わっているようです。ダッシュしたり壁をサクサクよじ登ったりかなりアグレッシブになっています。そういえば時のオカリナ3DSでリメイクが出てましたね。
あまり時間を掛けられないので攻略サイトを見ながらサクサク進めようと思いますが、発売前からすでに攻略し始めているサイトがチラホラありますね。海外版は日本より大分前から発売されていたからなのでしょうか?
ゼルダの伝説 スカイウォードソード 攻略wiki
マップも作られてます。

文字コード

今までサイト作成時にあまり気にしていなかった文字コードですが、YAHOO!をはじめGoogleやMSN、livedoorなど大手検索サイトがほとんどutf-8を用いていたので、それに倣ってshift_jisから変換してみた。


注意点など。


・htmlファイルヘッダーに書くutf-8文字コード指定は以下
<meta http-equiv="content-type" content="text/html; charset=utf-8">


・サイトの全テキストファイル(html、cssjavascript、txt、xmlなど)をutf-8に統一した方がよい。
ただし、.htaccessファイルはutf-8だとエラーになる場合もある。(サーバーの設定次第?)


・テキストファイルを1つずつ開いてutf-8で保存し直していってもよいが、ファイル数が多い場合は一括変換ソフトを用いるとよい。


WINDOWS備えつきのメモ帳ではutf-8で保存するとBOMというものが付いてしまう。
BOMが付くといくつかのブラウザでいろいろ問題がでるらしい。


・BOMを消すにはバイナリエディタなどを用いる方法もある。


サクラエディタだとutf-8で保存したときに、テキスト中に日本語(全角文字)が含まれていないとshift_jisに強制変換してしまう。


・一括変換ソフトでもファイル内に日本語がないとshift_jisに強制変換してしまうものがある。


・強制変換させないようにコメントアウトでなんでもいいから日本語を入れておくという手も。
例)コメントアウトの方法
htmlファイル
 <!--あ-->
xmlファイル
 <!--あ-->
cssファイル
 /*あ*/
jsファイル
 /*あ*/
robots.txt
 #クローラーさん無視しないでね


cssファイルは以下の一行で文字コード指定した上でutf-8で保存。
@charset "utf-8";


.htaccessファイルでサイト全体の文字コードを指定する方法もあるらしい。


Google先生が保存しているキャッシュの文字コードutf-8(ちなみにヤフーも)。キャッシュされたhtmlファイル自体には文字コードが指定してあるので問題ないが、外部化したjavascriptファイルなどは(shift_jisで書かれていても)utf-8で読み込まれてしまい文字化けしたりする。
外部ファイルの文字コードutf-8に直すのが面倒な場合は、以下のようにして文字コードを指定して外部ファイルを読み込むようにする。
<script type="text/javascript" src="/js/hoge.js" charset="Shift_JIS"></script>
これでhoge.jsはshift_JISで書かれていますとGoogle先生に伝えることができて文字化けしない。


ちなみにYahooでは外部化したjavascriptファイルはキャッシュに読み込まない。

WebARENAで.htaccessを用いてwwwあり・なし統一、index.htmlあり・なし統一させる方法

SEOを考えたサイト制作初期にやるべきこととしてwwwあり・なし統一、index.htmlあり・なし統一があります。

今まで某サーバーにてドメイン直下に.htaccessファイルを入れて

RewriteEngine on
RewriteBase /
RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ http://xxx.co.jp/$1 [R=301,L]

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^www.xxx.\.co\.jp
RewriteRule ^(.*)$ http://xxx.co.jp/$1 [R=301,L]

という感じで統一していたのですが、NTT系サーバーのWebARENAに移転したところ、同じ記述をしても統一されませんでした。

いろいろ四苦八苦したところ、ドメイン直下に入れていた.htaccessファイルには問題はないことが判明。

WebARENAではマルチドメインツールというのを用いてひとつのサーバーで複数ドメインを運用できるのですが、そのマルチドメインツールで自動生成された.htaccessファイルがミソでした。

以下WebARENAでwwwあり・なし統一、index.htmlあり・なし統一させる手順。




①マルチドメインツールにてxxx.co.jpとwww.xxx.co.jpをマルチドメイン化。

するとサーバーのhomeフォルダ直下に

# Enable RewriteEngine.
RewriteEngine On

# Main RewriteRule for multidomain.
RewriteCond %{HTTP_HOST} ^(xxx.co.jp|www.xxx.co.jp)
RewriteCond %{REQUEST_URI} !^/(xxx.co.jp|www.xxx.co.jp)/
RewriteRule ^(.*)$ /%{HTTP_HOST}/$1/ [L]

と書かれた.htaccessファイルが自動生成される。


②homeフォルダにxxx.co.jpという名前のフォルダとwww.xxx.co.jpという名前のフォルダを作る。


③xxx.co.jpには

RewriteEngine on
RewriteBase /
RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ http://xxx.co.jp/$1 [R=301,L]

と書いた.htaccessファイルを置く。


④www.xxx.co.jpフォルダには

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^www.xxx.\.co\.jp
RewriteRule ^(.*)$ http://xxx.co.jp/$1 [R=301,L]

と書いた.htaccessファイルを置く。



と、ここまでは問題なくできると思いますが、これでは何故かうまく統一されませぬ。多分ここで詰まる方は多いかと。


実は自動生成されたhomeフォルダ直下の.htaccessファイルに問題があります。

# Main RewriteRule for multidomain.
RewriteCond %{HTTP_HOST} ^(xxx.co.jp|www.xxx.co.jp)
RewriteCond %{REQUEST_URI} !^/(xxx.co.jp|www.xxx.co.jp)/
RewriteRule ^(.*)$ /%{HTTP_HOST}/$1/ [L]

最後のスラッシュが問題です。
このスラッシュを消すとうまい具合に統一されます。

このスラッシュがあるままだと、http://www.xxx.co.jp/はうまくhttp://xxx.co.jp/に行くのですが、
http://www.xxx.co.jp/aaa.htmlなどはhttp://xxx.co.jp/aaa.html/に行ってしまったりします。

携帯のアクセス制限(荒らし対策) 個体識別

掲示板を運営していると迷惑なのが、荒らし行為。

通常IPやホストでアクセス制限を掛けたりしますが、ホストによる制限は範囲が広くなりすぎるし.htaccessで弾こうとするとホスト⇒IPの変換をするのにサーバー負荷がかかるのでオススメできず。

よってIPで弾くことになるのですが、現在IPというのはどこのプロバイダでも動的IPの場合がほとんどなので、制限をかけても時間が経つとIPが変わってしますいます。

しかし短期的には効果があるのでその都度弾いていけばよいのですが、問題は携帯からの投稿。

パソコンのIPはルータやモデムなどの電源を落とさないとすぐには変わりませんが、携帯だとページにアクセスする度に変わります。

荒らし行為をするのはパソコンをもたず携帯からしか投稿できない小中高生が多いらしい(大人はそんな不毛なことに使うエネルギーがない・・)ので、これらをなんとかしないといけんわけですな。


PERLCGIで書かれている掲示板なら、環境変数を取得する簡単なプログラムを追加することで携帯の個体識別番号が取得できるので、これを使ってアクセス制限をかけるのが常套手段かと思います。


以下取得できる情報と環境変数


docomo/iモードID
英数字の7桁で大文字・小文字の区別あり
$ENV{'HTTP_X_DCMGUID'}
※実行CGIのファイル名に?guid=onというパラメータが必要

au/EZ番号(サブスクライバID
12345678901234_56.ezweb.ne.jp という形式の29桁のID
$ENV{'HTTP_X_UP_SUBNO'}

softbank
USER AGENTの中にあるSNの後の数字(P型は11桁、それ以降は15桁)
$ENV{'HTTP_USER_AGENT'}

◆jphone
16桁
$ENV{'HTTP_X_JPHONE_UID'}


これを組み込んで荒らしの個体情報を取得し、アクセスの度に参照するようにすればよいわけです。

ただし、投稿されるたびに余計なプログラムが動くのでサーバー負荷が高まります。

ページ閲覧時は弾かずに、コメント投稿時だけ弾くするようにするなど、プログラムが動作する範囲を少しでも狭くすることで低減はできますが。。

IE6などで横スクロールバーが生じてしまうバグ対策

CSSファイルで

html{overflow-x:hidden;}

と一行書き加えます。

これで横スクロールバーは消えます。


しかし問題も。

ウィンドウサイズを細くしたときも横スクロールバーが出てこないので、サイトをスクロールして見ることができなくなります。

IE6なんてもうほとんど使われていかなくなるだろうし、よほどのことが無ければ上記のようなことはしなくてもいいと思います。