phpの正規表現で困っています。


http://xxx.com/yyy/○○/××/

にアクセスすると、

http://www.com/yyy/index.php?c=○○&d=××

に変換したいのですが、正規表現がうまくいきません。

「○○」には「数字・ハイフン(-)」が入ります。
「××」には「数字・パーセント(%)」が入ります。

htaccessでrewriteさせているのですが、
うまくルールを書けない状態です。

index.phpと同じディレクトリにhtaccessを置きます。

正規表現な得意な方、書いて頂けますと助かります。

回答の条件
  • 1人5回まで
  • 登録:2007/05/02 03:14:40
  • 終了:2007/05/02 18:42:26

ベストアンサー

id:GEN111 No.4

GEN111回答回数472ベストアンサー獲得回数582007/05/02 17:53:11

ポイント50pt

Wikipedia や はてなキーワード はデコードして文字(列)に変換できるからいいんです。


> 「××」には「数字・パーセント(%)」が入ります。

 ここが文字列に変換できるのなら

RewriteRule ([\d\-]+)/(.+)/$ index.php?c=$1&d=$2

 とかでいけるはず。

id:onigirin

ありがとうございます。

3の方のコードと組み合わせたところ、うまく動きました。

どうもありがとうございました!

2007/05/02 18:40:50

その他の回答(3件)

id:rogets No.1

rogets回答回数114ベストアンサー獲得回数82007/05/02 07:36:45

ポイント10pt

http://noongoro.main.jp/note/note0050.html

ご参考下さい。

id:onigirin

どうもありがとうございます。

正規表現の使い方や関数は多少理解できるのですが、

どうしてもうまく動かないので書いて頂ける方を今回は探しています。

2007/05/02 15:35:59
id:GEN111 No.2

GEN111回答回数472ベストアンサー獲得回数582007/05/02 16:28:24

ポイント10pt

結論からいうとたぶん無理です。


> 「××」には「数字・パーセント(%)」が入ります。

 URL のパスの部分に「%」があると URLエンコードされていると扱われ、リライトエンジンに渡されるより前にデコードされます。

 たとえば

http://example.com/yyy/123/%41/ という URL でアクセスすると、リライトエンジンに渡された時点ですでに

http://example.com/yyy/123/A/ になっています。

 文字に変換できる場合はまだましですが、%0 などコントロールコードに当たる部分では無効な URL になります。


後ろも「数字・ハイフン(-)」(あるいは他の記号やアルファベット) にして PHP に渡されてから変換してやってはどうでしょうか。

id:onigirin

ありがとうございます。

それでは「はてなキーワード」や「Wikipedia」はどうなっているのか気になります。

URLに%が入っていて、かつrewriteしてる気がするのでできると思いましたが、不可能なのは残念です・・・。

%のリライトが不可能な場合は、他の方法があるのかもしれませんね。

2007/05/02 17:24:22
id:riaf No.3

riaf回答回数13ベストアンサー獲得回数02007/05/02 17:47:16

ポイント30pt

PHPで有る必要が有るかどうかは別として、この程度なら.htaccessで可能かと思います。

ただ、2の方が仰っているように、%はうまく値が渡らないと思います。

以下に例を示しますが、xxの部分はすべての文字列を対象としました。


RewriteEngine on

RewriteBase /yyy

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([0-9-]+)/(.*?)/?$ index.php?c=$1&d=$2 [L]


phpで切り分けたい場合は、PATH_INFOを見てやれば良いかと思います。

http://php.net/

id:onigirin

ありがとうございます。

%無しだとこれでうまくいきました。

2007/05/02 18:40:05
id:GEN111 No.4

GEN111回答回数472ベストアンサー獲得回数582007/05/02 17:53:11ここでベストアンサー

ポイント50pt

Wikipedia や はてなキーワード はデコードして文字(列)に変換できるからいいんです。


> 「××」には「数字・パーセント(%)」が入ります。

 ここが文字列に変換できるのなら

RewriteRule ([\d\-]+)/(.+)/$ index.php?c=$1&d=$2

 とかでいけるはず。

id:onigirin

ありがとうございます。

3の方のコードと組み合わせたところ、うまく動きました。

どうもありがとうございました!

2007/05/02 18:40:50

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

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません