人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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と同じディレクトリに置けばいいのでしょうか?

●質問者: tsuntsuku
●カテゴリ:インターネット ウェブ制作
✍キーワード:.htaccess CGI mod_rewrite URL アドレス
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● fonya3
●25ポイント

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

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]

で、どうでしょう。

◎質問者からの返答

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


2 ● hamster009
●5ポイント

#RewriteEngine on

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


3 ● hamster009
●5ポイント

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

◎質問者からの返答

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


4 ● toohigh
●30ポイント

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]

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

◎質問者からの返答

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


5 ● bewind
●40ポイント ベストアンサー

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 を本来置く所、と言ってわかるでしょうか…

◎質問者からの返答

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ