サーバの設定で、URL内のスラッシュの重複を許可しない(または重複を自動的に削除する)方法を教えてください。
【例】
URL1:http://weather.yahoo.co.jp/weather/
例えば上記URLは、以下のようにしても見れます。
URL2:http://weather.yahoo.co.jp//////////////////////////weather/
ですが、自分の動かしている別サイトでは、root以下にスラッシュが複数あるURLで
アクセスした時には、エラーを返すようにしたいのです。
もし可能であれば、重複を自動的に削除できればなお良いです。
この場合、上記のURLの例であれば、URL2でアクセスしても、
URL1に自動的にアクセスしなおすようにするということです。
ちなみにサーバは、Apache2.0でバーチャルホストを使っています。
mod_rewriteで可能なはずです。
エラーを返すならばエラードキュメントにリダイレクトしてください。
基本的には正規表現で文字列としてurlを置換します。
RewriteEngine on
RewriteRule (.*)/+(.*) $1/$2
でいいような気がしますが、手元に環境がないのでこれはまったく試してません。
http://httpd.apache.org/docs/2.0/ja/mod/mod_alias.html#redirectm...
mod_alias - Apache HTTP ������
RewriteEngine on
RewriteRule (.*)/+(.*) $1/$2
これではURLが変わりませんので、以下のように RedirectMatch を使うとよいと思います。
RedirectMatch 302 (.*)//(.*) http://example.com$1/$2
ただし、スラッシュの数だけリダイレクトが発生しますので注意が必要です。
ありがとうございます。
引き続き回答をお待ちします。
書き換えはうまくできないかもしれないので、とりあえずエラーにする方法を。
RewriteEngine On
RewriteRule ^(.*)//(.*)$ http://your.domain.com/404.html [L,R]
こうすると、リクエストされたURLの中にスラッシュ2つ連続しているときにhttp://your.domain.com/404.htmlにリダイレクトします。
ありがとうございます。
ではこれ以降は、書き換えの方法について回答頂ければありがたいです。>みなさま
すみませんさっきのは先頭2つのスラッシュに対応できてなかったのでこっちに差し替えで※ポイント結構です
RewriteEngine On
RewriteRule ^(/|(.*)//)(.*)$ http://labs.oqzl.net/?404 [L,R]
了解です。ありがとうございます。
引き続き回答を募集します。
ありがとうございます。
念のため、引き続き回答を募集します。