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つとわたしてみたいとおもったいるのですが。
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側で処理(ルーティング)したほうがいいかもしれません。
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から書くほうが適切な気がするのですが、あると動かない理由がわかりません。
見ていて思いついた程度の回答なので、ポイントは結構です。
#私も最近、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/ という形じゃないとマッチしないような気がします。
そういわれると、不安になりますが、たしか()の中の[^/]はスラッシュ以外ではなかったかと。
ありがとうございます。ためしてみたのですが、すべて404エラーがでてしまいます。たしかに^test1から書くほうが適切な気がするのですが、あると動かない理由がわかりません。