mod_rewriteに関する質問です。


Lingrのログを読むアプリを作っています。とりあえず、以下のようにルーム名をパラメータとして指定すれば直近200件(デフォルト)のログを表示できている状態です。

/app_dir/view?room=kenn

さて、これをmod_rewriteを使って

/app_dir/view/kenn

とアクセスしてもOKなようにしたいと思っています。.htaccessは以下のように書いてみました。

Options +MultiViews
RewriteEngine on
RewriteBase /app_dir
RewriteRule ^view/([0-9a-zA-Z]+)/?$ view?room=$1 [L]

ところが、/app_dir/view/kennでアクセスすると「ページのリダイレクト設定が正しくありません。このアドレスへのリクエストに対するサーバのリダイレクト設定がループしています。」(Firefox)とエラーになってしまいます。どこがまずいでしょうか?ご教示の程よろしくお願いします。

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

ベストアンサー

id:tezcello No.2

回答回数460ベストアンサー獲得回数69

ポイント50pt

先ずは MultiViews, RewriteRule を単独で記述して機能しているかを調べてみてはどうでしょうか?

(MultiViews が機能するかは確認済みだそうですが、問題のディレクトリで上手くいってますか?)

ループしているという事から、上位のディレクトリで何かやっているような気もするのですが。


共存が問題点であれば、

RewriteRule ^view/([0-9a-zA-Z]+)/?$ view.php?room=$1 [L]

とすれば、(拡張子を加える為だけに使われているのだとすれば)MultiViews は不要ですよね。

id:mine-D

おお!おっしゃるように特に必要ないと思われましたのでとりあえずMultiViewsをコメントアウトして試したところ、きちんと動作しました!ありがとうございます。感謝です!

2007/10/28 11:11:25

その他の回答1件)

id:b-wind No.1

回答回数3344ベストアンサー獲得回数440

ポイント35pt
/app_dir/view?room=kenn

拡張子等はついていませんが何か設定されていますか?


Alias 等ほかの Apatch の設定を反映させるには PT オプションが必要です。

RewriteEngine on
RewriteBase /app_dir
RewriteRule ^view/([0-9a-zA-Z]+)/?$ view?room=$1 [PT,L]

でどうでしょう?

id:mine-D

ご回答ありがとうございます。

わたしの理解では「Options +MultiViews」で拡張子が省略できるはずですので、あえてviewのみにしています。つまり、実際には「view.php」が実行されています。これに関しては他のアプリで実装して問題ない事を確認しています。

PTオプションを追加してみたのですが、結果は同じでした。うーむ、どうなんでしょう。正規表現の部分は問題ないでしょうか?あるいは他の原因でしょうか…。

2007/10/27 18:39:55
id:tezcello No.2

回答回数460ベストアンサー獲得回数69ここでベストアンサー

ポイント50pt

先ずは MultiViews, RewriteRule を単独で記述して機能しているかを調べてみてはどうでしょうか?

(MultiViews が機能するかは確認済みだそうですが、問題のディレクトリで上手くいってますか?)

ループしているという事から、上位のディレクトリで何かやっているような気もするのですが。


共存が問題点であれば、

RewriteRule ^view/([0-9a-zA-Z]+)/?$ view.php?room=$1 [L]

とすれば、(拡張子を加える為だけに使われているのだとすれば)MultiViews は不要ですよね。

id:mine-D

おお!おっしゃるように特に必要ないと思われましたのでとりあえずMultiViewsをコメントアウトして試したところ、きちんと動作しました!ありがとうございます。感謝です!

2007/10/28 11:11:25
  • id:mine-D
    自己レス。

    ループしてしまう理由が分かったかもしれません。「^view/([0-9a-zA-Z]+)/?$」でマッチして「view?room=$1」に書き換えた場合、この書き換え後のアドレス自身も上の正規表現にマッチしてい…ますよね?なので永遠に書き換え続ける(ループする)事に。ですので、この場合だと

    ^show/([0-9a-zA-Z]+)/?$ view?room=$1

    のようにスクリプト名とマッチさせる機能名は別にしておいた方がいいようです。MultiViewsは特に関係ないと思われます。

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

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

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

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