【htaccess】存在するディレクトリ・ファイル名をリダイレクト除外する方法

ポイントとなるのは、RewriteRule を「何もしない」の意味の「-」(ハイフン)にすること。これで存在するフォルダ・ファイルをリダイレクトの対象から外すことができます。

ざっくり言うと

説明

ポイントとなるのは、

RewriteRule の移動先にあたるところをハイフンだけにすることによって、何もしない、つまりリダイレクトの除外にすることができます。

また、RewriteCond で、Wordpress ではよく「存在するディレクトリ名・ファイル名であれば除外」という風にしていると思います。こんな風に。

しかし今回は、逆に存在していれば、という条件発動にしてリダイレクトの対象から外しています。

追記:Windows Server(IIS)の場合

Windows Server(IIS)の場合、受信規則を以下のように従って追加していきます。

  • URL の一致
    • 要求された URL: パターンに一致する
    • 使用: 正規表現
    • パターン: ^(.*)$
  • 条件
    • 論理グループ化: いずれかと一致
    • 条件 1: ファイルである
    • 条件 2: ディレクトリである
    • 条件間でキャプチャ グループを追跡する: いいえ
  • サーバー変数: とくに設定しない
  • アクション
    • アクションの種類: なし
    • 後続の規則の処理を停止する: はい

iis-noredirect-kisoku

 

WWWの有無は統一した方が良い

WWW にするかしないかに関わらず、どちらかには統一した方がいいです。Apache、Windows Server、それぞれの記述方法を備忘録ついでにまとめてみました。

http-www

WWW にするかしないかに関わらず、どちらかには統一した方がいいです。
そして、仮に WWW(www.example.comとか)に統一したとしたら、WWW じゃないほう(example.comとか)にアクセスされたらちゃんとリダイレクトしてあげるべきだと思います。

これは特に調べたわけじゃありませんが、どちらでもアクセス可能になりますと SEO 的にも分散されちゃってよくないかと・・・

ということで、統一の仕方の備忘録です。

 

そして大半の方(レンタルサーバー含)が Apache だと思いますが、Windows Server (IIS) の場合も併記しておきます。

Apache

WWWありに統一する

※ www.example.com は自身のドメインに置き換えてください。

WWWなしに統一する

※ example.com は自身のドメインに置き換えてください。

Windows Server (IIS)

WWWありに統一する

※ (www.)example.com は自身のドメインに置き換えてください。
※ 既存の web.config がある場合、それと統合するような形で記述してください。

WWWなしに統一する

※ (www.)example.com は自身のドメインに置き換えてください。
※ 既存の web.config がある場合、それと統合するような形で記述してください。

プログラマ・WEBデザイナーのみなさんへアンケートです。是非ご協力を!

[poll id=”1″]

[poll id=”2″]

[poll id=”3″]

[poll id=”4″]

[poll id=”5″]

CPI サーバーで Internal Server Error になったらまず確認すること

まず最初に .htaccess に目に行きましたが、CPI のサーバーでは php.ini も一緒に直さないといけないということに、最初気付けませんでした…私的備忘録です。

1. .htaccessの記述に間違いがないかを確認する

何よりも第一。
記述をよく確かめたり、怪しい記述行をコメントアウトしたりなど・・・一般的に .htaccess を書き間違えていないかを確認する。

また、エラー起こる前の .htaccess があったら戻してみたり、
2つの .htaccess をテキスト比較ツール (difff.jp)などに貼り付けて何が違うか・どこの記述が間違っているかを確かめる。

2. 適切なPHPのバージョンになってるか?対応している php.ini をアップしているかを確かめよう

執筆時現在(2015年3月10日)、
.htaccess や php.ini をアップしないと既定で PHP 5.6 で動作するようになっている。

けれどそれだと困るアプリケーションもあるんだよな・・・
たとえば、

  • 古い WordPress
    PHP 5.6 × WordPress 3.6 の組み合わせで遭遇。管理画面が真っ白・・・
  • Research Artisan Lite
    PHP 5.4 で遭遇。管理画面の一部ページでエラーが吐き出されていました・・・

なので適切な PHP バージョン・php.ini を読み込ませる。

たとえば PHP 5.3.6 にしたい場合は CPI の公式ヘルプのうち項目3・4をする。
http://www.cpi.ad.jp/cms/wp/tips/ftp_install/

ほかの PHP バージョンにしたい場合は適宜読み替えて設定する。

そして重要なのが、PHP 5.5 未満の場合は php.ini の設定を忘れないこと!
(他のバージョンでも設定忘れちゃだめだけど、特に・・・)
そうしないと、Wordpress でテーマ・プラグイン編集中に真っ白になってしまうことがあるからな・・・

原因は、デフォルトのエンコーディングが EUC-JP になっているから、それを php.ini で UTF-8 にしなきゃいけないんだ・・・

追記:ひととおりZIPにして用意してみました

PHP 5.3、5.4、5.5の php.iniと.htaccessをZIPにして用意してみました。
http://www.ams.jp/staff_blog/wp-content/uploads/2015/04/CPI-Init-Files.zip

(2015年4月16日追記)

備忘録の後書き

初めてこのブログを執筆します西村と申します。
先月の下旬、これが原因でお客様のサイトをエラーにしてしまいました…

具体的にいうと、PHP 5.4 を動作させているのにも関わらず PHP 5.3 用の php.ini ファイルを読み込ませていたり、そういうことを知らずに PHP の読み込みバージョンを上げてみたり(5.3→5.4)…
これに気づくまでに完全復旧まで4〜5時間くらいを要してしまいました。

話は変わるのですが、僕自身はWeb系の専門学校を卒業してきました。
そのWeb担当の先生が言っていた愚痴を思い出しました。

「学校のサーバー EUC-JP 強いからな…この空間(ディレクトリ)を UTF-8 にしないといけない」

思い返せば学校のサーバーも CPI を使っていたのかな…なんて思いました。

最初の1記事目から専門的な記事になってしまいましたが。
Web ページを作る身として、まだまだ未熟なものではありますが、暖かく見守っていただければ幸いです。