.htaccessでパラメータをディレクトリ名にしようと下記のように書いています。


RewriteEngine On
RewriteRule ^([一-龠]+|[ぁ-ん]+|[ァ-ヴー]+|[a-zA-Z0-9]+|[a-zA-Z0-9]+)/([0-9a-zA-Z\-]+)/$ kekka.php?word=$1&itemno=$2 [L]

ディレクトリの一階層目は日本語を含んだアイテム名、ディレクトリの二階層目はアイテムID(半角英数字)で考えています。

つまり、
http://設置URL/アイテム名(日本語URLエンコード済)/アイテムID/
という形式でアクセスしたときに
http://設置URL/kekka.php?word=アイテム名&itemno=アイテムID
となることを想定しています。

とりあえずこれで動いたのですが、アイテム名が一部条件で動きませんでした。
それは、
・アイテム名に「+(半角)」など半角記号を含んだ時
・アイテム名に「&(半角)」を含んだ時
です。

これを回避する方法があれば、教えてください。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2009/06/18 12:43:06
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:kntr1 No.2

回答回数82ベストアンサー獲得回数14

ポイント52pt

RewriteRule ^([^/]+)/([^/]+)/?$ kekka.php?word=$1&itemno=$2 [L]

上記のルールでいいのでは?

 ^先頭  [^/] スラッシュを含まない何でも1文字以上 次は/必須 次の[^/] スラッシュを含まない1文字以上

 最後の/?$ は、最後/で終わっても終わらなくてもいいよという意味

 ? はてなは、一個前の文字が0文字か1文字という意味

 $ 最後という意味

上記で解決すると思います。

 解答にURLが必要みたいなので、とりあえず検索のリンクでもはります

 http://www.google.co.jp/search?q=RewriteRule&sourceid=navclient-...

id:wackey

ありがとうございます!

明日、上記内容で、動作を確認してみます。

2009/06/14 00:27:12

その他の回答1件)

id:pahoo No.1

回答回数5960ベストアンサー獲得回数633

ポイント18pt

日本語文字だけでなく半角文字もURLエンコードの対象にした方がいいでしょう。

+(半角)は%2Bに、&は%26にエンコードされるはずです。

id:wackey

ありがとうございます・

半角「+」はUrlエンコード済みです。

2009/06/14 00:26:39
id:kntr1 No.2

回答回数82ベストアンサー獲得回数14ここでベストアンサー

ポイント52pt

RewriteRule ^([^/]+)/([^/]+)/?$ kekka.php?word=$1&itemno=$2 [L]

上記のルールでいいのでは?

 ^先頭  [^/] スラッシュを含まない何でも1文字以上 次は/必須 次の[^/] スラッシュを含まない1文字以上

 最後の/?$ は、最後/で終わっても終わらなくてもいいよという意味

 ? はてなは、一個前の文字が0文字か1文字という意味

 $ 最後という意味

上記で解決すると思います。

 解答にURLが必要みたいなので、とりあえず検索のリンクでもはります

 http://www.google.co.jp/search?q=RewriteRule&sourceid=navclient-...

id:wackey

ありがとうございます!

明日、上記内容で、動作を確認してみます。

2009/06/14 00:27:12

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

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

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

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

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