mod_rewriteで動的URLから静的URLにする

http://www.ooo.com/cgi-bin/my_data/my_data.cgi?action=search_all_lists&cat=123
というアドレスを
http://www.ooo.com/search_all_lists/cat/123.html
というアドレスで表示するには、.htaccessにどう記述すればよいでしょうか?
もしそれで表示が無理な場合、どのようなアドレスにしたら表示可能でしょうか?
また.htaccessはmy_data.cgiと同じディレクトリに置けばいいのでしょうか?

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

ベストアンサー

id:bewind No.5

回答回数33ベストアンサー獲得回数10

ポイント40pt

cat も変数なんでしょうかね?


RewriteEngine on

RewriteRule ^/([^/]+)/([^/]+)/([^/]+)\.html$ /cgi-bin/my_data/my_data.cgi?action=$1&$2=$3 [L]


でどうでしょう。


cat が変数でなければ


RewriteEngine on

RewriteRule ^/([^/]+)/cat/([^/]+)\.html$ /cgi-bin/my_data/my_data.cgi?action=$1&cat=$2 [L]


また、この場合この Rewrite を書いた .htaccess を置くのはドキュメントルートです。

http://www.ooo.com/ の index.html を本来置く所、と言ってわかるでしょうか…

id:tsuntsuku

原因が分かりました。最初の「/」がいりませんでした。色々と試していたのですが、「/」とは盲点でした。たぶん、「/」の位置さえ気をつければ、皆様の記述はほとんど使えると思います。最終的には、bewindさんのを利用させていただきました。皆様、ありがとうございました。また、わかりやすくお答えいただいて感謝感激です。

2006/08/17 00:33:00

その他の回答4件)

id:fonya3 No.1

回答回数238ベストアンサー獲得回数10

ポイント25pt

ここの説明が分かりやすいです。

http://tech.bayashi.net/svr/doc/apache/mod_rewrite.html


RewriteEngine on

RewriteRule ^/cgi-bin/sample/([0-9A-Za-z]+)/([0-9A-Za-z)]+)\.html$ /cgi-bin/sample/sample.cgi?a=$1&b=$2 [L]

すると、http://www.sample.com/cgi-bin/sample/123/456.html にアクセスすると、

http://www.sample.com/cgi-bin/sample/sample.cgi?a=123&b=456 にアクセスしたのと同じ結果が返るようになります。

を参考にすると、

http://www.ooo.com/search_all_lists/cat/123.html にアクセスすると、

http://www.ooo.com/cgi-bin/my_data/my_data.cgi?action=search... にアクセスしたのと同じ結果が返るようにするなら

RewriteEngine on

RewriteRule ^/cgi-bin/my_data/([0-9A-Za-z]+)/cat/([0-9A-Za-z)]+)\.html$ /cgi-bin/my_data/my_data.cgi?action=$1&cat=$2 [L]

で、どうでしょう。

id:tsuntsuku

やってみたのですが、だめでした・・・サーバーは問題ないようなので、記述方法だとは思うのですが。

2006/08/16 23:04:26
id:hamster009 No.2

回答回数3431ベストアンサー獲得回数50

ポイント5pt

#RewriteEngine on

#RewriteRule "/cgi-bin/my_data/my_data.cgi?action=search_all_lists&cat=123" "/search_all_lists/cat/123.html"

id:hamster009 No.3

回答回数3431ベストアンサー獲得回数50

ポイント5pt

2 うまくいきませんでした。

id:tsuntsuku

そうですか、残念です・・・

2006/08/16 23:04:34
id:toohigh No.4

回答回数291ベストアンサー獲得回数37

ポイント30pt

fonya3 さんが挙げておられるパターンを少しいじっただけですが、

RewriteRule ^/cgi-bin/my_data/(.+)/cat/([0-9A-Za-z)]+)\.html$ /cgi-bin/my_data/my_data.cgi?action=$1&cat=$2 [L]

・・・とかだといかがでしょうか。

多分、一つ目のマッチングで "_" が含まれていないのがうまくいかなかった原因かな、と・・・・。

それでも NG なようでしたら、

RewriteRule ^/cgi-bin/my_data/search_all_lists/cat/([0-9A-Za-z)]+)\.html$ /cgi-bin/my_data/my_data.cgi?action=search_all_lists&cat=$1 [L]

とか、

RewriteRule ^/cgi-bin/my_data/(.+)/cat/123\.html$ /cgi-bin/my_data/my_data.cgi?action=$1&cat=123 [L]

あたりからぼちぼちやってみるとうまく行く場合のヒントがつかめるかもしれません。

id:tsuntsuku

うまくいきません・・・。私の考える記述も皆さんのとほとんど同じなので、やはりサーバー側の問題なのでしょうか。サーバー会社の人に問い合わせたら「使えます」っていう回答だったのですが。.htaccessはmy_data.cgiと同じディレクトリに置けばいいのでしょうか?

2006/08/16 23:58:58
id:bewind No.5

回答回数33ベストアンサー獲得回数10ここでベストアンサー

ポイント40pt

cat も変数なんでしょうかね?


RewriteEngine on

RewriteRule ^/([^/]+)/([^/]+)/([^/]+)\.html$ /cgi-bin/my_data/my_data.cgi?action=$1&$2=$3 [L]


でどうでしょう。


cat が変数でなければ


RewriteEngine on

RewriteRule ^/([^/]+)/cat/([^/]+)\.html$ /cgi-bin/my_data/my_data.cgi?action=$1&cat=$2 [L]


また、この場合この Rewrite を書いた .htaccess を置くのはドキュメントルートです。

http://www.ooo.com/ の index.html を本来置く所、と言ってわかるでしょうか…

id:tsuntsuku

原因が分かりました。最初の「/」がいりませんでした。色々と試していたのですが、「/」とは盲点でした。たぶん、「/」の位置さえ気をつければ、皆様の記述はほとんど使えると思います。最終的には、bewindさんのを利用させていただきました。皆様、ありがとうございました。また、わかりやすくお答えいただいて感謝感激です。

2006/08/17 00:33:00

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

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

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

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

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