RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/+$ $1 [R=301,L]
URLの最後のスラッシュ(/)を自動的に消す方法を説明します。
コードはズバリコレ↓
RewriteEngine On
RewriteBase /
RewriteRule ^(.*)/+$ $1 [R=301,L]
.httaccessに記載します。
ポイントは3行目。
1、2行目はすでに設置してあれば、最後の行だけ追加すればOK。
それぞれの意味
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行目。
ディレクトリじゃないときだけ最後のスラッシュを削除します。