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

1つのページに3つのリンクがあり、
http://www.hogehoge.com/test1/jirei_search/mansion/
http://www.hogehoge.com/test1/jirei_search/mansion/01/
http://www.hogehoge.com/test1/jirei_search/mansion/02/03/
と、mansionをパラメーターとして渡す場合と
mansionと01を渡す場合
mansionと02と03を渡す場合
で.htaccessでmod_rewriteをためしていますが、
3つパラメーターをわたすのがどうしてもうまくいきません。
ソースはこのように書きました。

DirectoryIndex index.php
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([0-9A-Za-z]+)\.html$ index.php?id1=$1 [L]
RewriteRule ^/test1/jirei_search$ /test1/jirei_searh/ [L]

RewriteRule ^([^/]+)/$ index.php?id1=$1

RewriteRule ^([^/]+)/([^/]+)/$ index.php?id1=$1&id2=$2
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/$ index.php?id1=$1&id2=$2id3=$3 [L]

http://www.hogehoge.com/test1/jirei_search/mansion/02/03/

へのアクセスで
jirei_searchの中にある.index.phpに3つ以上のパラメータをわたすにはどうしたらよいのでしょうか?4つ5つとわたしてみたいとおもったいるのですが。

●質問者: zap50326
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:.htaccess HTML INDEX mod_rewrite ON
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● wizemperor
●100ポイント ベストアンサー

test1/jirei_search/の後に再度リライトすることを前提にしているみたいですが、

Lフラグの付け方がおかしいように思います。

わかりやすく書き直してみました。

DirectoryIndex index.php
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# /mansion.html -> /test1/jirei_search/mansion/
RewriteRule ^([0-9A-Za-z]+)\.html$ test1/jirei_search/$1/

# /test1/jirei_search/mansion/
RewriteRule ^test1/jirei_searh/([^/]+)/$ index.php?id1=$1 [L]

# /test1/jirei_search/mansion/01/
RewriteRule ^test1/jirei_searh/([^/]+)/([^/]+)/$ index.php?id1=$1&id2=$2 [L]

# /test1/jirei_search/mansion/01/02/
RewriteRule ^test1/jirei_searh/([^/]+)/([^/]+)/([^/]+)/$ index.php?id1=$1&id2=$2id3=$3 [L]

これだと、パラメータが増えると書き足しが大変なので、

さらにパラメータを増やす可能性がある場合は、PHP側で処理(ルーティング)したほうがいいかもしれません。

◎質問者からの返答

ありがとうございます。ためしてみたのですが、すべて404エラーがでてしまいます。たしかに^test1から書くほうが適切な気がするのですが、あると動かない理由がわかりません。


2 ● tomcat_a88
●0ポイント

見ていて思いついた程度の回答なので、ポイントは結構です。

#私も最近、mod_rewrite で苦戦しています・・・

これだと、2件目以降がマッチしないような?

ここのところは、

> RewriteRule ^([^/]+)/([^/]+)/([^/]+)/$ index.php?id1=$1&id2=$2id3=$3 [L]

RewriteRule ^([^/]+)/(.*)/(.*)/$ index.php?id1=$1&id2=$2id3=$3 [L]

という感じでいきませんでしょうか。

2件目以降のところ

/([^/]+)/

となっていると スラッシュが出現した後、スラッシュから始まった文字 という検索になるので、

/test1/jirei_search/mansion/02//03/ という形じゃないとマッチしないような気がします。

◎質問者からの返答

そういわれると、不安になりますが、たしか()の中の[^/]はスラッシュ以外ではなかったかと。

関連質問


●質問をもっと探す●



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