.htaccessで【mod_rewrite】を使いサーチパスを静的ページ風に変換したいです。


・環境は
FreeBSD apache 1.3.x

・したいこと

(1)http://xxx.com/store/index.html?c=category&g=group

http://www.com/store/category/group.html

(2)http://xxx.com/store/index.html?c=category

http://www.com/store/category/

(3)http://xxx.com/store/index.html?g=group

http://www.com/store/

上記に加え、元のパスの「index.html」は無しの場合にも
対応させたいと思います。

よろしくお願いします。

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

ベストアンサー

id:tezcello No.2

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

ポイント60pt

DirectoryIndex でパラメータを与えると store/?c=... がうまくいかない様なので

DirectoryIndex index.html

RewriteEngine on
RewriteRule ^([^/]+)/ index.html?c=$1&%{QUERY_STRING}
RewriteRule /([^/]+)¥.html$ test.php?g=$1&%{QUERY_STRING}  [L]
RewriteCond %{QUERY_STRING}  ^$
RewriteRule ^$ index.html?g=group

でどうでしょうか?


.htaccess は、/store に置く。

/store 配下には、指示する名前(=category)のファイルもディレクトリも存在しない。

/store/category 配下には指示する名前(=group.html)のファイルは存在しない。

の予定で書きました。検証が十分でないかも知れませんが、

/store/

/store/category/

/store/category/group.html

/store/index.html?c=par1&g=par2

/store/?c=par1&g=par2

に対応出来ていると思います。

ついでに、

c=... g=... 以外のクエリが追加されてもOKです。

例えば、

/store/category/group.html?a=123

のアクセスは、

/store/index.html?c=category&g=group&a=123

に置き換えられます。

id:soyuz11

ありがとうございます。

期待通りの挙動となりました。

htaccessを少しずつ改良して

精度を上げて行きたいと思います。

2007/05/29 16:23:17

その他の回答1件)

id:GEN111 No.1

回答回数472ベストアンサー獲得回数58

ポイント10pt

www.com → xxx.com のようにドメインまで指定するとどうしてもリダイレクトしてしまうような気がします。

DirectoryIndex index.html?g=group

RewriteEngine On
RewriteCond %{REQUEST_URI} /$
RewriteRule ^(.+?)/ http://xxx.com/store/index.html?c=$1

RewriteEngine On
RewriteRule ^(.+?)/(.+)\.html?$ http://xxx.com/store/index.html?c=$1&g=$2

group.html → g=group

dog.html → g=dog

cat.html → g=cat

のように解釈しましたが、(3)の時は無条件に g=group になるのでしょうか?

あと、

> 元のパスの「index.html」は無しの場合

というのもよく分かりませんでした。

id:soyuz11

ありがとうございます。

説明不足で申し訳ございません。

xxx.com は仮のサーバ名です。

変換後のwww.comは意味不明ですね‥

xxx.com = www.com = / (ルート)

ルート「/」からの考えで結構です。

index.htmlは無しというのは、

store/index.html?c=param1&g=param2

store/?c=param1&g=param2

でも同じ挙動になるようにという意味です。

GETパラメータのcとgはページ表示に欠かせないパラメータとの仮定で、

/store/c/g.html にしたいのです。

2007/05/23 17:24:13
id:tezcello No.2

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

ポイント60pt

DirectoryIndex でパラメータを与えると store/?c=... がうまくいかない様なので

DirectoryIndex index.html

RewriteEngine on
RewriteRule ^([^/]+)/ index.html?c=$1&%{QUERY_STRING}
RewriteRule /([^/]+)¥.html$ test.php?g=$1&%{QUERY_STRING}  [L]
RewriteCond %{QUERY_STRING}  ^$
RewriteRule ^$ index.html?g=group

でどうでしょうか?


.htaccess は、/store に置く。

/store 配下には、指示する名前(=category)のファイルもディレクトリも存在しない。

/store/category 配下には指示する名前(=group.html)のファイルは存在しない。

の予定で書きました。検証が十分でないかも知れませんが、

/store/

/store/category/

/store/category/group.html

/store/index.html?c=par1&g=par2

/store/?c=par1&g=par2

に対応出来ていると思います。

ついでに、

c=... g=... 以外のクエリが追加されてもOKです。

例えば、

/store/category/group.html?a=123

のアクセスは、

/store/index.html?c=category&g=group&a=123

に置き換えられます。

id:soyuz11

ありがとうございます。

期待通りの挙動となりました。

htaccessを少しずつ改良して

精度を上げて行きたいと思います。

2007/05/29 16:23:17

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

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

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

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

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