【質問】

サーバの設定で、URL内のスラッシュの重複を許可しない(または重複を自動的に削除する)方法を教えてください。

【例】
URL1:http://weather.yahoo.co.jp/weather/

例えば上記URLは、以下のようにしても見れます。

URL2:http://weather.yahoo.co.jp//////////////////////////weather/

ですが、自分の動かしている別サイトでは、root以下にスラッシュが複数あるURLで
アクセスした時には、エラーを返すようにしたいのです。

もし可能であれば、重複を自動的に削除できればなお良いです。
この場合、上記のURLの例であれば、URL2でアクセスしても、
URL1に自動的にアクセスしなおすようにするということです。

ちなみにサーバは、Apache2.0でバーチャルホストを使っています。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:jouno No.1

回答回数280ベストアンサー獲得回数0

ポイント20pt

mod_rewriteで可能なはずです。

エラーを返すならばエラードキュメントにリダイレクトしてください。

基本的には正規表現で文字列としてurlを置換します。


RewriteEngine on

RewriteRule (.*)/+(.*) $1/$2


でいいような気がしますが、手元に環境がないのでこれはまったく試してません。

id:mizox

ありがとうございます。

念のため、引き続き回答を募集します。

2005/11/29 11:14:38
id:ootatmt No.2

回答回数1307ベストアンサー獲得回数65

ポイント20pt

RewriteEngine on

RewriteRule (.*)/+(.*) $1/$2


これではURLが変わりませんので、以下のように RedirectMatch を使うとよいと思います。


RedirectMatch 302 (.*)//(.*) http://example.com$1/$2


ただし、スラッシュの数だけリダイレクトが発生しますので注意が必要です。

id:mizox

ありがとうございます。

引き続き回答をお待ちします。

2005/11/29 16:38:09
id:ito-yu No.3

回答回数323ベストアンサー獲得回数14

ポイント20pt

書き換えはうまくできないかもしれないので、とりあえずエラーにする方法を。

RewriteEngine On

RewriteRule ^(.*)//(.*)$ http://your.domain.com/404.html [L,R]

こうすると、リクエストされたURLの中にスラッシュ2つ連続しているときにhttp://your.domain.com/404.htmlにリダイレクトします。

id:mizox

ありがとうございます。

ではこれ以降は、書き換えの方法について回答頂ければありがたいです。>みなさま

2005/11/30 12:40:48
id:ito-yu No.4

回答回数323ベストアンサー獲得回数14

ポイント20pt

すみませんさっきのは先頭2つのスラッシュに対応できてなかったのでこっちに差し替えで※ポイント結構です

RewriteEngine On

RewriteRule ^(/|(.*)//)(.*)$ http://labs.oqzl.net/?404 [L,R]

id:mizox

了解です。ありがとうございます。

引き続き回答を募集します。

2005/11/30 12:41:09

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません