.htaccess:存在しないURLを404ページにリダイレクトする

WEBサイトで存在しないページにアクセスすると英語の画面が表示される場合があります。

404_not_found

これは、存在しないページにアクセスした時に表示されるエラーページ(404ページ)です。
リンク切れをしていたり、URLを間違えて入力した場合などに表示されます。

上記のような英語の画面だとユーザが何のページかわからず、戸惑ってしまう可能性があります。
また、サイトから離脱してしまう可能性も出てきます。

なので、独自の404ページを用意し、ページが存在しないことをユーザに伝えることが非常に大切だと思います。

下記に.htaccessを使用し、存在しないページにアクセスした際に独自の404ページリダイレクトする方法をメモします。


.htaccessで404ページにリダイレクト

まず独自のカスタム404ページを作成します。

404.html

.htaccessに下記のコードを記述します。

ErrorDocument 404 /404.html

作成した「404.html」と「.htaccess」をドキュメントルートに設置します。

存在しないURLでアクセスし、作成したカスタム404ページが表示されればOKです。


WordPressの404ページ

WordPressで404ページを作成する場合は使用しているテーマのディレクトリに「404.php」を設置します。
.htaccessに404リダイレクトの処理を記述しなくて大丈夫です。

存在しないページにアクセスすると「404.php」の内容が表示されます。


色々なWEBサイトを見ていると404ページが設置されていないサイトが多くあると思います。
レンタルサーバだとそのサーバの404ページが表示されます。

404ページを作成することで、ページが存在しないことのメッセージをユーザに伝えることができます。
404ページにサイト内検索やTOPページへのリンク、サイトマップなどを記述することでユーザビリティの向上につながります。
また、SEO的にも有効だと思います。

ショップサイトなどでは、商品が売り切れになってページがなくなることがあると思うので、
新着商品やおすすめ商品などの紹介をするのもいいかもしれません。

ぜひチェックしてみてください。

.htaccess:トップページ以外のアクセスをリダイレクト

WEBサイトを構築している時にトップページ以外アクセスを拒否したい場合があります。
サイトの引越しやサイトの閉鎖などの時も必要になるかもしれません。

.htaccessを使用すれば、トップページ以外の下層ページにアクセスがあった場合、
トップページリダイレクトさせることが可能です。

下記に.htaccessを使用し、下層ページアクセストップページリダイレクトさせる方法をメモします。


トップページ以外のアクセスをリダイレクト

ドキュメントルートに.htaccessを設置します。
下記の内容を.htaccessに記述します。

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} !(^/$)
RewriteRule ^(.*)$ / [R=301,L]

トップページのアクセスをリダイレクトさせない為に、
下記を記述しています。
無限ループさせないように「トップページではない場合」
という条件を指定しています。

RewriteCond %{REQUEST_URI} !(^/$)

また、画像やCSSを使用する為、一部のディレクトリを許可したい場合は、
下記のように記述します。
※「image」、「css」ディレクトリを許可する場合

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} !(^/$)
RewriteCond %{REQUEST_URI} !(^/image/)
RewriteCond %{REQUEST_URI} !(^/css/)
RewriteRule ^(.*)$ / [R=301,L]

下記の条件を追加しています。

RewriteCond %{REQUEST_URI} !(^/image/)
RewriteCond %{REQUEST_URI} !(^/css/)

php:phpでhttpsへリダイレクトする

前回は.htaccesshttpsのページへリダイレクトする方法を書きましたが、今回はphphttpsのページへリダイレクトする方法をメモします。

httpsのページが数ページ程度であれば、phpのファイルでリダイレクト処理をしてもいいかもしれないです。
その時の状況で使い分けるといいかもしれませんね。

phpでも処理内容は同じなのでhttpsではない場合に、header()関数を利用してリダイレクトします。


phpでhttpsへリダイレクト

phpファイルの先頭に下記の内容を記述します。

if (empty($_SERVER['HTTPS'])) {
	header("Location: https://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
	exit();
}

$_SERVER[‘HTTPS’]が空の場合、アクセスしたURLをhttpsのページへとリダイレクトします。
httpsでアクセスした場合は上記のif文に入らないので、それ以降の処理を実行します。


.htaccess:.htaccessでhttpsへリダイレクトする

httpでアクセスされた際にhttpsのページへリダイレクトさせたい場合があります。
.htaccessを使用するとhttpsリダイレクトさせることが可能です。

その時の方法をメモします。


.htaccessでhttpsへリダイレクト

.htaccessのファイルに下記の内容を記述します。

<IfModule mod_rewrite.c>
    RewriteEngine on

    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</IfModule>

SSL通信したいディレクトリに.htaccessを設置します。
設置したディレクトリ以下のページに適用されます。
サイト全体に適用させる場合は、ドキュメントルートに設置します。


■ .htaccess 記述内容

RewriteEngine on

RewriteEngineを有効にします。


RewriteCond %{HTTPS} off

httpsではない場合という条件を付けます。


RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

アクセスされたURLをhttpsのページへリダイレクトします。