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

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

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

にアクセスすると、

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

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

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

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

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

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

●質問者: onigirin
●カテゴリ:ウェブ制作
✍キーワード:INDEX PHP Rewrite アクセス ディレクトリ
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● rogets
●10ポイント

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

ご参考下さい。

◎質問者からの返答

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

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

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


2 ● GEN111
●10ポイント

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


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

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

たとえば

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

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

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


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

◎質問者からの返答

ありがとうございます。

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

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

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


3 ● riaf
●30ポイント

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/

◎質問者からの返答

ありがとうございます。

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


4 ● GEN111
●50ポイント ベストアンサー

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


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

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

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

とかでいけるはず。

◎質問者からの返答

ありがとうございます。

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

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

関連質問


●質問をもっと探す●



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