[no_toc]
URLの最後のスラッシュ(/)を自動的に消す方法を説明します。
コードはズバリコレ↓
RewriteEngine On RewriteBase / RewriteRule ^(.*)/+$ $1 [R=301,L]
.htaccessに記載します。
ポイントは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の最後にスラッシュ(/)を自動強制補完したい場合は、以下の記事を参照ください。
コメント
.httaccess って初めて見ましたw