Archive for the ‘.htaccess’ Category

静的ファイルで構成されたサイトを WordPress で構築しリニューアルする際にスムーズに切り替える方法とか作法

静的ファイルで構成された古いサイトをリニューアルしましょうと言ってリニューアルすることは最近よくあることですね。
ですが、古いコンテンツから新しいコンテンツに切り替える、つまり静的ファイルから WordPress に切り替える場合に、静的ファイルを全て削除してから、そこに WordPress をインストールするという力技、もしくは、静的ファイルが入っているところに WordPress のファイルぶち込んで、index.html を優先にして、少しずつ作業をしていくなんていう野蛮なことはやっていませんか。

今回は先程書いた13時になったら Web サイトをカチっとリニューアルする作法とか方法の発展形として、静的ファイルで構築された古い Web サイトを、滞りなく WordPress で構築されたサイトに切り替える方法をご紹介しますよ。

.htaccess を設置する

といっても、先程書いた記事でほとんど説明していますので、原理についてはそちらを参照してください。ここではいきなりラストスパートです。
以下の .htaccess を設置してください。

1
2
3
4
5
6
7
8
9
10
11
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^123.456.789.01
RewriteCond %{REQUEST_URI} !^/hoge/
RewriteRule (.*) /before/$1 [L]
# for WordPress
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

ちょっと、ここは私もなんとなくでやってるので、解釈間違ってるかもしれませんが、仕組みとしては、最初の RewriteRule で通常の人は /before/ のファイルにアクセスしようとするので、その後の WordPress 用の RewriteRule は適用されないけど、最初の RewriteRule をくぐり抜けた我々などは、WordPress の RewriteRule が効きますので、WordPress でのサイトが閲覧可能です。

リニューアル後に切り替えは、WordPress 部分以外削除します。例として以下のような感じにします。

1
2
3
4
5
6
7
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

これで全ての人が WordPress で構築されたサイトを閲覧できますね。

13時になったら Web サイトをカチっとリニューアルする作法とか方法

Web サイトをリニューアルする。例えば、明日の13時から切り替えたいという場合に、13時前にファイルを全部削除して新しいファイルを上げなおすっていうのは、とてもナンセンスだと思います。
13時になったら、ファイルの記述をちょっと変更するだけでカチッとサイトを切り替える方法を紹介します。

1. mod_rewrite を使ってルートへのアクセスを before ディレクトリへ書き換える

通常、http://example.com/index.html へのアクセスは、http://example.com/index.html のファイルを表示しますが、mod_rewrite を使って、http://example.com/index.html へのアクセスされた場合に、http://example.com/before/index.html ファイルの処理結果を返すようにします。やり方としては以下です。

.htaccess に以下のように書いて、ドキュメントルートに置いてください。

1
2
3
4
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule (.*) /before/$1 [L]
</IfModule>

内容としては、どんなアクセスもとりあえず、まずは /before/ 以下の結果に飛ばすという設定です。ドキュメントルートの場所を変更したと思えばいいかな。通常は /www/ 以下が公開用ディレクトリのところ、/www/before/ 以下に変更したと思ってもらえばいいかなと今の私は思っています。

ちなみに、特定のディレクトリ以下で全然関係ないサイトを運営している場合。例えば、http://example.com/hoge/ というディレクトリ以下で「hoge site」というサイトを運営しており、ここは今回のリニューアルとまったく関係ないと言う場合に今回の設定をすると、http://example.com/hoge/ へのアクセスが http://example.com/before/hoge/ へのアクセスとして内部的に書き換わってしまいますので、以下のようにして /hoge/ への場合は書き換えをしないようにしましょう。

1
2
3
4
5
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/hoge/
RewriteRule (.*) /before/$1 [L]
</IfModule>

/hoge/ へのアクセスの場合は RewriteRule が適用されないようになっています。

2. 自分の環境からだけはアクセスを書き換えずリニューアル後ページが表示されるようにする

ここからがメインディッシュです。現在かかってる書き換えを自分だけ除外します。除外する方法として、今回は以下のように IP アドレスを使います。

1
2
3
4
5
6
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^123.456.789.01
RewriteCond %{REQUEST_URI} !^/hoge/
RewriteRule (.*) /before/$1 [L]
</IfModule>

この設定は、グローバル IP アドレスが、123.456.789.01 でなく、リクエストした URL が http://example.com/hoge/ ではないときのすべてのアクセスを /before/ 以下に書き換えるという設定になります。IP アドレスの部分に自分のグローバル IP アドレスを入れることで、自分だけは http://example.com/index.html にアクセスしても http://example.com/index.html の結果を返してきます。

この方法で、他の人には今までどおりサイトを公開しながら、自分だけはサーバーで事前にリニューアル後のサイトをチェックするといったことが可能です。

3. 13時になったらカチッ Web サイトをリニューアル後に切り替えます

方法は簡単です。先程の .htaccess を削除するだけ。既に存在している .htaccess に追記で書き込んだ人は追記した部分を綺麗サッパリ消せばいいだけ。
削除をすれば、全ての人がリニューアル後のページにアクセスするようになります。

PHP ファイルが文字化けてしまう場合は .htaccess で文字コードを UTF8 にする

PHP ファイルが文字化けてしまう。ファイルの保存文字コードも meta タグにしている文字コードも UTF-8 に揃えているのに、なぜか文字化けてしまう。そういう場合は、サーバーの文字コードも疑ってみましょう。

サーバーの文字コードが UTF-8 じゃない場合は、.htaccess で指定することが可能です。ただし、php_value, php_flag が禁止されているサーバーでは少し難しいかもですね。

1
2
3
4
5
6
7
php_value mbstring.internal_encoding UTF-8
php_value default_charset UTF-8
php_value mbstring.http_output UTF-8
php_value mbstring.language UTF-8
php_value mbstring.http_input auto
php_flag mbstring.encoding_translation On
php_value output_handler mb_output_handler

.htaccess が使えない場合、PHP ファイルの方で個別に指定することも可能です。詳しくは.htaccess で PHP の表示言語を切り替えるが参考になります。

.htaccess でディレクトリのファイル一覧を非表示にする方法

通常ディレクトリのファイル一覧を非表示にする場合、Apache のを設定してやります。要は httpd.conf を以下のように設定をしますですね。

1
Options Indexes FollowSymLinks

と書いてある部分を以下のように設定します。

1
Options FollowSymLinks

.htaccess で指定することもできます。共用サーバーとかだったら弄れないと思うので、そういう時に便利です。

1
Options -Indexes

XAMPP (ローカル) で BASIC 認証を使う方法まとめ

ある特定の人物にしかアクセスさせたくないページを作る場合であって、なんか面倒くさいとき、BASIC 認証を使うんですが、XAMPP ではなぜか使えませんでした。手軽に導入できるのが BASIC 認証の良いところであって、手軽に導入できなかったら諦めるべきところを、本日2時間かけて解決しましたので、まとめておきます。

※XAMPP が C ドライブ直下にインストールされているという設定でお話を進めていきます。皆さんの環境によって補完してくださいね。

一般的な BASIC 認証を使う方法

.htpasswd を書く

htpasswd 用パス作成ツール (phpspot) などを使って暗号化したパスワードを生成しましょう。

1
admin:44E/qORekFV0E

.htaccess を書く

例えば c:\web\kezy.org でサイトを制作していて、そこに .htpasswd を置く場合は以下のように書くのが一般的ですよね。

1
2
3
4
5
6
7
8
9
<Files ~ "^.(htaccess|htpasswd)$">
deny from all
</Files>
AutdUserFile c:\web\kezy.org\.htpasswd
AutdGroupFile /dev/null
AutdName "Please enter your ID and password"
AutdType Basic
require valid-user 
order deny,allow

基本的なことや詳しいことについて説明は省きますが、以下のサイトがとても分かりやすくまとめてありますので、紹介しておきます。
.htaccessでベーシック認証 | バシャログ。

とりあえず、これで動くはずだと思うんですが、これじゃダメみたいです。XAMPP で BASIC 認証を使うには以下のようなことに気をつけなければいけません。 (気をつけた方が良いかもしれません。)

XAMPP で BASIC 認証を使う方法

htpasswd.exe を使用する

Apache に入っている htpasswd.exe を使って、パスワードファイルを生成することができます。使い方は、Windows XP であれば [アクセサリ] -> [コマンドプロント] を起動して、以下のように書きます。

1
c:\> [htpasswd] [コマンド] [生成場所] [id名]

htpasswd

htpasswd はデフォルトでは apache\bin に入っていると思います。XAMPP をインストールしたのなら、xampp\apache\bin にあるのではないでしょうか。細かいことは適当で良いですよね(笑)

コマンド

htpasswd.exe のコマンドについては以下のサイトが分かりやすいのですが、少し見にくかったので引用して表にまとめさせていただきました。
株式会社エスロジカル – 技術ドキュメント Apache:htpasswd コマンド

コマンド 説明
-c 新しいパスワードファイルを作成します。もし、同名のパスワードファイルがすでに存在する場合は、既存の内容が削除されます。
-n どのような結果になるかのみを標準出力して終了します。パスワードファイルを変更しません(テスト実行用)。
-m パスワードをファイルに書き込む際、MD5 でハッシュします。
-d パスワードをファイルに書き込む際、CRYPT でハッシュします(デフォルト)。
-p パスワードをファイルに書き込む際、ハッシュしないで、プレーンなテキストのまま書き込みます。
-s パスワードをファイルに書き込む際、SHA でハッシュします。
-b パスワードを、対話式入力ではなくて、コマンドライン引数として指定できるようにします。

今回は MD5 でハッシュして新しくファイルを生成したいので、-mc が良いのでしょうか。MD5 以外でいけるかわかりませんが、私はこれで成功しましたので、この方法を紹介しておきます。

生成場所

なんかこれ、どこでも良いと思って適当なフォルダに生成していたんですが、ダメでした。いろいろ試行錯誤を繰り返して、apache\bin フォルダの中に生成したら上手く行きましたよ。

id 名

今回は admin にすることにします。これは何でも大丈夫です。

そんで、これらを考慮して書くと、以下のようになります。

1
c:\> c:\xampp\apache\bin\htpasswd -mc c:\xampp\apache\bin\.htpasswd admin

これを入力してエンターを押すとパスワードの入力を2回要求されるので、2回入力すれば、指定した場所に生成されます。
もちろん .htaccess は以下のように書きなおしておいてくださいね。

1
2
3
4
5
6
7
8
9
<Files ~ "^.(htaccess|htpasswd)$">
deny from all
</Files>
AutdUserFile c:\xampp\apache\bin\.htpasswd
AutdGroupFile /dev/null
AutdName "Please enter your ID and password"
AutdType Basic
require valid-user
order deny,allow

これで上手くいくんですが、なぜこうじゃなきゃダメなんでしょうか。詳しい方がおられましたら、ぜひコメントなどして教えてください。また何か表現や説明などで間違っている部分がありましたら指摘よろしくお願い致します。

.htaccess が見れないサーバーでも Filezilla を使えば表示させることができる

.htaccess が禁止されているわけではないけどなぜか表示することができないサーバーって稀にありますよね。その場合は Filezilla で表示させることができます。手順は以下になります。

  1. Filezilla を起動する。
  2. メニューのサーバーをクリック。
  3. 強制的に隠しファイルを表示するにチェック。

FTP ソフトと言えば FFFTP が有名ですが、Filezilla を使うようになると FFFTP に戻ることができなくなります。

.htaccess を利用してページの移転作業をスマートに行う

例えば http://www.ke-plan.com/cal にあるファイルを http://kepy.biz に移転したとします。.htaccess を知らない人や初心者は、ページのURLが変わったときの移転方法として以下のようにメタタグを用いてやることが多いと思います。斯く言う私も初心者の頃はメタタグを用いて移転作業を行っていました。

1
<meta http-equiv="refresh" content="5;URL=http://kepy.biz">

これは5秒後に http://kepy.biz にリダイレクトするという意味になります。全てのファイルに埋め込む必要があるので、何百ページもファイルがある場合は死ぬほど大変な作業になります。

でもこのような場合は .htaccess に以下のような記述をすれば一瞬で解決することができます。

1
Redirect permanent /cal/ http://kepy.biz/

これは http://www.ke-plan.com/cal 以下に来るアクセスを http://kepy.biz へリダイレクトさせるという意味になります。しかも、http://www.ke-plan.com/cal/hoge/hoge.html へのアクセスは http://kepy.biz/hoge/hoge.html へリダイレクトしてくれます。.htaccess を活用すれば、ちょっとしたディレクトリ構造の変化にも簡単に対応することができますね。

ちなみにリダイレクトをする際、正規表現も使うことができます。以下のページはそれについても詳しく解説しているので、ぜひ一度参考にしてみてください。
.htaccessでリダイレクト機能を利用する方法

  • Date: 2009-4-17 (金) 14:47:43
  • Category: .htaccess

.htaccess で特定のディレクトリにある include ファイルへのアクセスを拒否

include ファイルへの外部からの閲覧を拒否するには .htaccess に次のように記述して、外部から閲覧されたくないファイルの存在するディレクトリに配置します。

1
2
Order allow,deny
Deny from all

でも、include ファイルが他のファイルの中に混じっている場合は、この方法ではすべてのファイルがアクセス拒否になってしまうので、次のように記述を変更しますです。以下のサイトに書いてありました。
includeファイルにアクセスされたくない時の.htaccess

1
2
3
4
<Files ~ "\.(php|inc)">
Order allow,deny
Deny from all
</Files>

この方法は include するファイルが .php か .inc の場合に限ります。

携帯サイトへのPCからのアクセスを.htaccessを使って簡単に拒否もしくは振り分けをする

結構大変な気がしますが、とても便利なサービス「Mobile IP htaccess Maker」を使うことによって一瞬で解決します。
携帯端末以外のIPを制限するhtaccessを簡単生成 『Mobile IP htaccess Maker』 – HTMLタグボード

これだけではPCからのアクセスを拒否するだけなので、さらに.htaccessに以下のように記述することでPCからのアクセスをPC用サイトに振り分けることができます。

1
ErrorDocument 403 PCサイトのURL
Page 1 of 212