2018夏のweb制作無料相談会(名古屋当日)
2018夏のweb制作無料相談会(名古屋当日)
2017.01.27

WindowsサーバにWordPressをインストールする際にハマった注意すべき5点

しょごたん

こんにちは、しょごです。

最近シャドウバースをずっとプレイしてます。必死にプレイして AA0 になりましたが、Master ランクまではまだ先が長いですね。。
ハースストーンもしかり、こういう戦略カードゲームは大好きです。
プレイしすぎて夢の中で対戦していたのか、寝言で「さぁ次はどれをやろうかな(おそらく「どのリーダーでプレイしようかな」)」とか言ってたらしいです。

 
先日 WordPress 構築案件を行う際に、クライアントのサーバが Windows サーバだということが発覚しました。codex にインストール方法とかも載っているから不可能ではないはず。が、Windows サーバってことで「何かしらクセがあって手間どるんじゃないかなー」と思っていたところ、予想どおりいくつかハマってしまいました。

そこで今回は、Windows サーバにて WordPress 環境を構築した際に、発生した問題点を過去の禊(みそぎ)として綴っていきたいと思います。

 

前提条件

こちらが、用意された最低限のサーバです。

サーバ OS Windows Server 2008
Web サーバ Microsoft Internet Information Services 6
PHP 5.6 系
MySQL 5.7 系

こちらを踏まえて、以下読み進めてみてください。

 

1, htaccess がそのままでは使えない

Windows サーバでは WordPress で必須な .htaccess が利用できません。そこで、代わりに web.config ファイルにて同様の処理を記述してやります。WordPress を設置したディレクトリに必要な記述を行なったファイルを設置します。

<system.webServer>
<rewrite>
	<rules>
		<rule name="wordpress" patternSyntax="Wildcard">
			<match url="*"/>
			<conditions>
				<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
				<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
			</conditions>
			<action type="Rewrite" url="index.php"/>
		</rule>
	</rules>
</rewrite>
</system.webServer>

 

2, Rewrite が動作しない

今回の環境だと、Rewrite が動作しませんでした。WordPress の必須機能ですね。ここでは [Rewrite module 2.0 for IIS](https://www.compnet.jp/archives/1238) をインストールして対応しました。Windows サーバに限らず、クライアントが用意する最低限ミドルウェアを入れただけの環境には必要なモジュールが存在しないため、動作しないものがたまにあります。ここは注意したいポイントですね。

 

3, 管理画面のスタイルシートが認識しない

linux 環境で作成した WordPress の DB ダンプを先方環境にリストアして動作確認を行なったところ、管理画面がレイアウト崩れを起こしてしまいました。具体的には CSS が効いていない状態で、文字のみが表示されてる形です。

いろいろ調べた結果、WordPress が必要とする CSS は load-style.php にて統合されてるのですが、そちらが動作していないようでした。このため、wp-config.php に下記を記述して対応しました。

define('CONCATENATE_SCRIPTS',false);

上記を記述することで管理画面の Javascript のファイル連結が無効になるそうですが、CSS ファイルも同様に扱われてたようなので、こちらで対応しました。

 

4, メディアアップロードでローディング画像がぐるぐるまわったまま進まない

ファイルアップロードを行おうとするとローディング画像がぐるぐるまわるアクションが起こりますが、この状態のまま一向にアップロードウインドウが表示されませんでした。環境によって wp-admin/ajax-load.php が正しく動かないらしく、content-type:text/html で読まれてるため動作しませんでした。そのため、下記のように対応しました。

//@header( 'Content-Type: text/html; charset=' . get_option( 'blog_charset' ) );
if(in_array($_POST['action'], array('query-attachments', 'send-attachment-to-editor'))){
	@header('Content-Type: application/json; charset=' . get_option('blog_charset'));
}else{
	@header( 'Content-Type: text/html; charset=' . get_option( 'blog_charset' ) );
}

コアファイルをいじる形となったので、WordPress のアップデートには気をつける必要があります。加えて、アップロード先のテンポラリディレクトリに対しても権限付与する必要があったので、下記の対応を行いました。

 
1, php.ini の upload_tmp_dir に "C:¥TEMP" を設定
2, 上記テンポラリディレクトリに権限フルコントロール付与
3, IIS 再起動
4, wp-config.php に「define('WP_TEMP_DIR','C:¥TEMP');」設定
5, uploads ディレクトリに「IIS_IUSERS」の権限フルコントロール付与

 

5, php からのメール送信( mail 関数など)が使用できない

当初ポートが開いてなかったのでそれが原因かとも思いましたが、sendmail.exe 単体でそもそも動作しませんでした。
そのため、仮想 SMTP サーバを構築し、SMTP 送信を利用するプラグインを導入することで対応しました。

 
1. サーバマネージャーを起動し、機能を追加で SMTP サーバを選択
2. インストール後、「インターネットインフォメーションサービス 6.0 マネージャー」を起動
3. SMTP Virtual Server のプロパティでアクセスタブ野中の接続制御と中継の制限にて「127.0.0.1」を許可する
4. SMTP Virtual server を起動
5. cmd で telnet による動作確認で問題なくメールが送信できれば OK
6. wp mail smtp プラグインにてローカルの smtp を利用したメール送信を実施

 

まとめ

いかがだったでしょうか。

当初サーバの権限はファイル設置と DB のリストアのみとしていましたが、最終的にフルコントロールいただきこちらでサーバ環境を調整することとなりました。Linux 環境では特に難なく作業できているので、ちょいと環境が違うとこうも手順が変わるものですね。MovableType のインストールも Windows サーバに対応するための調整が各種必要な部分もありましたが、WordPress はそれを超える作業でしたね。ナレッジも少なめだったので何かの参考になればと思います。

それでは。