パーマリンク設定で404。mod_rewriteが有効じゃないと発覚した時。
最終更新日: - POST CATEGORY = バグ


WordPressでブログなりWebサイトなりを作る時にとっても重要なのがパーマリンク設定です。ビジネス目的でWordPressを使う場合、このパーマリンク設定を行わない人はほぼいないと思います。
今月3件のWordPressを使ったサイトを作りましたが、そのすべてで勿論のこと「パーマリンク設定」をしています。
が、その中で1件、どうしてもパーマリンク設定ができなかった案件がありました。
どういうことが起こったのか。
まず、普段通りに、作り始めたからなるべく早い段階でパーマリンク設定を行いました(したつもりでいました)。固定ページを作り、見てみようとしたその時です。
「404 not found」
おいおいちょっと待ったんさい。Not foundって。
でもこの時点ではあまり動じませんでした。「あ、htaccess更新しなかったわ」とすぐに気づいたからです。
設定によっては.htacessの更新が必要
パーマリンクを設定したら、.htaccessを更新しなければなりません。
通常であればパーマリンクの更新ボタンを押せば良いわけですが、極極々稀にWordPress管理画面から更新ボタンを押しただけだと、.htaccessが更新されないケースがあるようなのです。
試しにFTPソフトを使って直接WordPressディレクトリを確認すると案の定、.htaccessないじゃ〜ん。
パーマリンクの設定をする前は、ここに.htacessはありません。でも設定後は自動で作られる場合もありますが、設定によっては自分自身で作らなければなりません。
ちなみに書く内容はこんな感じ。
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>
RewriteBaseとRewriteRuleはWordPressを設置した場所によって書き換えます。
例えば「 http://www.example.com/blog 」という場所に設置したとしたら、こんな風に書きます。
<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>
で、FTPにアップします。
これでパーマリンクの設定終わり:-))))と・・・・
・・・なりませんでした。
一瞬、仕事をやめようかと思いました。
と、言うのは大袈裟です。本気ではありません。ですが打たれ弱い私は一瞬「こんなことも解決できない私は人様からお金を頂戴してはいけない!」と10秒程度は考えました。10秒後から、解決策を探すわけですが。
困った時は、検索するに限ります。自分自身で他に明確な原因が思いつくのであればそこをチェックするのも手かもしれませんが、「あれ〜?おかしいなぁ」くらいに思っていたら、手当たり次第ファイルを確認するよりもググった方が頭がクリアになります。考える力を使うより、判断する力を使った方が、人間冷静に対処できるもんです。
まずはダイレクトに「パーマリンク not found」と検索しました。
すると、こんな記事を発見。→パーマリンクの変更で404エラーになります。
サーバーは mod_rewrite に対応しているか?
コメントに「サーバーは mod_rewrite に対応している。」と言うコメントがありました。
ま・・・さか・・・私が今触れているサーバー・・・mod_rewriteに対応していないのでは・・・・。
私は自分が生業にしている仕事柄、本当にさまざまなレンタルサーバーをお客様からお預かりします。安い・有名・高いけど多機能・いじれる・いじれないけど安心、レンタルサーバーも十人十色ですが、今まで幸いにもmod_rewriteが使いないサーバーに出会うことはありませんでした。
mod_rewriteって?
Apache側で要求されたURLを書き換えたり、リダイレクトしたりしてくれるモジュール。書き換えルールは正規表現パーサに基づいている。apache 1.3系 には標準で含まれている。
Hatena Keyword
もう一度.htacessの中身を見てみましょう。
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>
『IfModule mod_rewrite.c』の部分、日本語で訳すとこうなる・・・のかな・・・。『もし mod_rewrite が使えたら』みたいな?
つまりパーマリンク設定をする際に必要な.htaccessはmod_rewriteが使えることを前提にしているのです!
とにかくmod_rewriteが使えないか確かめます
先にも書きました通り、いろいろなレンタルサーバーを触ってきましたが、mod_rewriteが使えないレンタルサーバーは初めてでした。そして、そんなサーバーですので、当然ながらmod_rewriteが有効か確認できる場所までいじることができません。
でも私は基本的に自分自身を信じていません。まだ「私が間違えてる、きっと何か見落としている」と思っています。と言う訳で、mod_rewriteが使えるのか、簡単な.htaccessを作ってみます。
<IfModule mod_rewrite.c> RewriteEngine on RewriteBase / RewriteRule ^.*$ /modrewrite_parmlink_404 [L] </IfModule>
これをこのままコピペして.htaccessを作り、ご自身のルートディレクトリにアップしてホームページにアクセスしてみてください。
もしもこのブログに飛んできたとしたら、mod_rewriteは有効です。そしてごアクセスありがとうございます(笑)もしも飛ばなかったらmod_rewriteは有効ではありません。
私は何度も申し上げますが基本的に自分を信じていないので、クセがあって使いづらいと有名なドメインキングさんで試してみました。(使い易さは人それぞれですが、WordPress向きではないと思います/汗)が、普通に飛んできたので、@nifty ビジネスホスティングさんはmod_rewriteが使えないで結論付けさせてくださいませ。
mod_rewriteが使用できないサーバーでのパーマリンク設定を可能にするプラグインがあるらしい
私はまだ試していないので、実際のところどうかわかりませんが、こんなプラグインもあるようです。
mod_rewriteが使用できないサーバーでのパーマリンク設定>>>PCとWordPressの小技 様
パーマリンク設定ができないサーバーをお使いのお客様のために行ったこと
結局、やりたい事ができないのでは、作りたいWebサイトを諦めるか、作れる環境を用意するしかありません。今回私がご提案したのは「サーバーを替える」ことでした。
@Niftyが決して悪い訳ではありません。むしろ、ユーザーが変なところまでいじらないようにしっかり構築された安全重視のレンタルサーバーであるとも言えます。ですが、今回お付き合いさせていただいているお客様は「ランニングコストが気になる」「性能面で長けているのかも不明だし、気にしようにもどの程度の性能が必要かわからない」とのことでした。ですので、思い切ってサーバーのお引っ越しをご提案しました。
ドメイン管理についても新サーバー関連会社へ管理を移管、請求面でもお客様が混乱しないように丁寧にご説明しご納得いただきました。Webサイトを作る事は勿論ですが、Webサイトはあくまでも表舞台のキャラクター。サーバーなどやそれに伴う契約などの事務手続きなど、目に見えない部分が潤滑なWebサイト運営のネックになっていることも少なくありませんので。
ただ、面倒ですよね、レジストリトランスファー(笑)。何度やっても慣れません。
【追記】口車に乗ってこのページにリダイレクトされまくって困っている方へ
この記事を書いてから長い時間が経過しておりました。
産後、仕事と育児で超絶パニックでブログのチェックしてなかったんです。
Web屋としてあるまじき・・・ですが、しゃーない、これが今現在の私の事実だ。
そんなある日、サブドメインの方でトラブって、そっちが解決できなくて途方に暮れてこっちのブログを眺めてたら、大変恐縮なことに当ブログをご紹介くださった方がいらっしゃいました。
ありがとうございます〜。
窓際オヤジの備忘録様 http://toropicalwind.com/2017/03/18/post-454/
すると大変!
うち、迷惑かけとるじゃねーか!!!
この記事に書いてあることを試して、リダイレクトされまくってしまっている方が実はいっぱいいらっしゃるんじゃないか!?
冷や汗っすわ、マジで。
ごめんなさいです、マジで。
つうわけで、FTPクライアント別.htaccessとか.htpasswdの表示方法のリンク集めてみました。
【FFFTPの場合】 https://htaccess.cman.jp/upload/hide_show/ CMAN 様
【Filezillaの場合】 http://560days.com/lab/2012/04/000884.php 忘却の彼方 様
【Cyberduckの場合】http://bl6.jp/web/webinfo/cyberduck-htaccess-display/ bl6.jp 様
そもそも.htaccessがみえないんだけど!!って怒った方へ
全く不親切なブログ書いたもんです。
defaults write com.apple.finder AppleShowAllFiles true killall Finder
これでみれるようになります。
【Windowsの場合】
多分これでいいんじゃないかと。
https://helpx.adobe.com/jp/x-productkb/global/cpsid_87117.html