apacheのRewrite機能を使用してURLを静的に変更したいのですが、エラーが発生して困っています。

原因の可能性についてご教授をお願いいたします。

[httpd.conf設定]
LoadModule rewrite_module modules/mod_rewrite.so
RewriteEngine On
RewriteRule ^po(.*)/$ /test.php?id=$1 [L]
※ apache再起動の結果は、Syntax OKとなっています。

[仕様]
http://ドメイン/po1234 ⇒ http://ドメイン/test.php?id=1234

[結果]
Not Found
The requested URL /po1234 was not found on this server.

回答の条件
  • 1人3回まで
  • 13歳以上
  • 登録:2011/03/06 17:59:00
  • 終了:2011/03/13 18:00:03

回答(4件)

id:Galapagos No.1

Galapagos回答回数963ベストアンサー獲得回数892011/03/06 18:08:52

ポイント23pt

以下の2行が必要です。

RewriteRule ^po(.+)/$ /test.php?id=$1 [L]
RewriteRule ^po(.+)$ /test.php?id=$1 [L]

パラメータが数字だけなら、下記のようにした方がいいでしょう。

RewriteRule ^po([0-9]+) /test.php?id=$1 [L]
id:cochoo

ありがとうございました。

ご教授いただいた方法でも状況は変わりませんでした。[L]を[L,R]にしても"Not Found"でしたので、

おそらくRewrite処理すらされていないものと考えます。

RewriteRuleが処理(登録)されていることを確認するコマンドとかはないでしょうか?

2011/03/06 18:31:28
id:y-kawaz No.2

y-kawaz回答回数1420ベストアンサー獲得回数2252011/03/06 18:57:32

ポイント23pt

httpd.confに書くなら頭に / が必要

RewriteRule ^/po(.*)/$ /test.php?id=$1 [L]

同じ内容を .htaccess に書く場合は、頭の / があっちゃだめだけどね。

id:cochoo

ありがとうございます。

httpd.conf、.htaccess双方でも結果は変わりませんでした。

結果として、ブラウザのURL表示に変化がなく「Not Found」となりましたので、

そもそもApacheのRewriteが有効になっていないか、Rewriteディレクティブ設定が有効出ない可能性が考えられます。なんらかのコマンドで正しいかどうかをしらべる手段はないでしょうか?

2011/03/06 23:20:10
id:toki-2131 No.3

toki-2131回答回数138ベストアンサー獲得回数12011/03/06 21:07:35

ポイント22pt

以下の2行が必要です。

RewriteRule ^po(.+)/$ /test.php?id=$1 [L]

RewriteRule ^po(.+)$ /test.php?id=$1 [L]

パラメータが数字だけなら、下記のようにした方がいいでしょう。

RewriteRule ^po([0-9]+) /test.php?id=$1 [L]

でもなんもかわらんかったとおもいます。

たぶんレジストリのしわざかもしれません

レジストリがげいいんでできないかもしれません。

id:cochoo

ありがとうございます。

回答1と同じ通り、状況は変わりませんでした。

仰られる「レジストリ」とはどこを懸念されているのでしょうか?

2011/03/06 22:49:30
id:pretaroe No.4

pretaroe回答回数531ベストアンサー獲得回数752011/03/07 10:47:27

ポイント22pt

本当に記述そのままですか?

記述例に似てるだけで実際は違うとかだと原因がわかりにくいですね。

まず、簡単な例を作ってリダイレクト自体ができるのかどうかを調べてみてください。

たまに出来ないレンタルサーバーとかもありますので。

あと気になったのは、静的に換える場合の仕様って

http://ドメイン/test.php?id=1234  ⇒ http://ドメイン/po1234

のように逆でないとおかしいと思いますよ

?でパラメータがついたら、それは動的URLだと思うのですが、なにか勘違い等されてないか

ご確認ください。

  • id:rouge_2008
    次ではどうなるでしょうか?
    RewriteRule ^/?po([^/]+) /test.php?id=$1 [L]


    あとは、RewriteLogとRewriteLogLevelを指定して、ログファイルを確認してみてください。
    ※「RewriteLogLevel」は少なくとも3以上にしますが、確認終了後は0にするか2以下にしてください。

    http://satospo.sakura.ne.jp/blog_archives/tech/apache/rewrite_loglevel.html
    http://ameblo.jp/1700line/entry-10231641428.html
    http://wiki.bit-hive.com/tomizoo/pg/mod_rewrite%A4%CE%BB%C8%A4%A4%CA%FD

    指定したルールのどの部分が間違っているのかは分かりませんが、ログが出力されればRewriteが動作している事になります。

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません