【.htaccess】1行で解決!URLの最後のスラッシュを自動的に消す方法

サーバー設定

URLの最後のスラッシュ(/)を自動的に消す方法を説明します。

コードはズバリコレ↓

RewriteEngine On
RewriteBase /
RewriteRule ^(.*)/+$ $1 [R=301,L]

.httaccessに記載します。

ポイントは3行目です。

スポンサーリンク

それぞれの意味

RewriteEngine On

URLをリライトしますよという意味で、Offにすればリライト機能が全てオフになります。
大文字でも小文字でも、大文字小文字が混ざってもOK。

RewriteBase /

リライトするする時のベースアドレスをルートにする設定。
よほどトリッキーなことをしない限り、設定しておくこと。
次のRewriteRuleは、この記載がないとうまく動きません。

RewriteRule ^(.*)/+$ $1 [R=301,L]

RewriteRule
リライトする命令文
^(.*)/+$ $1
何かの文字列【(.*)】で始まって【^】、スラッシュで終わったら【$】、スラッシュを抜いた何かの文字列【(.*)】→【$1】でリダイレクトしてね。
[R=301]
転送は恒久的にね。
[L]
条件はここで終わり。
※今回の場合は、あってもなくても良いが、下記のような「RewriteCond」を使う場合は必須。

エラー : ディレクトリ内のindexが表示されない場合

ディレクトリ内のindex.htmlやindex.phpをディレクトリ指定だけで実行したい場合、
上記の方法ではエラーになるので、以下のようにします。

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/+$ $1 [R=301,L]

変更箇所は3行目。

ディレクトリじゃないときだけ最後のスラッシュを削除します。

逆に「URLの最後にスラッシュ(/)を自動強制補完したい場合は、以下の記事を参照ください。

コメント

タイトルとURLをコピーしました