.htaccessで末尾の「/」(スラッシュ)を消す方法

.html/でのアクセス

以前、Googleアナリティクスを眺めていた時のことです。

http://example.com/sample.html/
あるサイトが上記のような.htmlの後にスラッシュが付いた間違ったURLで複数回アクセスされていることがありました。

どういった経緯でアクセスされたのかは不明でしたが、
末尾にスラッシュを付けてアクセスするとページが正しく表示されません。

そこで、.htaccessを使って末尾の「/」(スラッシュ)を消す方法をいくつか試してみました。

 

URLの末尾にスラッシュを自動補完をしないように設定する

URLの末尾にスラッシュが自動でついてしまう場合があるため、それを無効化にする方法です。

.htaccessに以下の様に記述します。

 

# .htaccess
DirectorySlash Off

 

▼参考サイト
http://combitaro.net/article/152

しかし、今回の場合はこれでは上手く反映されませんでした。
自動補完ではなかったのでしょうか。。

 

.html/にアクセスされた際に.htmlにリダイレクトさせる

次に.htaccessを使って.html/でアクセスされた場合に.htmlにリダイレクトさせる方法を試しました。

例えば、http://example.com/sample.html/にアクセスされたら、
http://example.com/sample.htmlにリダイレクトするという方法です。

.htaccessに以下の様に記述します。

 

# .htaccess
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(example.com/sample.html/)(:80)? [NC]
RewriteRule ^(.*) http://example.com/sample.html$1 [R=301,L]

 

wwwありをwwwなしにする場合によく使われるようです。
結局これでも上手く反映されません。

 

mod_rewriteを利用してリダイレクトさせる

最後に試したのがmod_rewriteを利用してリダイレクトさせる方法です。
これはmod_rewriteが有効な場合のみ適用されるようです。

.htaccessに以下の様に記述します。

 

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

 

スラッシュが消えた…!

これで、
http://example.com/sample.html/にアクセスされても、
http://example.com/sample.htmlを表示させることができました。

 

色々な方法を覚えておくと、いざという時スムーズに対処できそうですね。