• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:htaccessのRewriteRuleの正規表現)

htaccessのRewriteRuleの正規表現

このQ&Aのポイント
  • htaccessのRewriteRuleを使用して、URLの書き換えを行いたい場合、正規表現を利用することができます。
  • 実現したい動作は、ドメイン名以後にユーザ名がある場合はindex.phpにGETのuserでuser_nameを渡し、ユーザ名表示の際にはオプションがある場合はそのまま変換先URLの最後尾に記述することです。
  • 現在のhtaccessの設定では、目的の動作がうまく行っていないため、正しい書き方を確認してください。

質問者が選んだベストアンサー

  • ベストアンサー
  • mikemike7
  • ベストアンサー率87% (97/111)
回答No.3

クエリーのことは考えなくても良いです。 RewriteRule ^(.+)/test/$ index.php?user=$1 [QSA,L] とりあえずこれで試してみてください。

mmei
質問者

お礼

再度のご回答ありがとうございます。 確認したところ、ご指摘のとおりの記述で成功しました。 本当にありがとうございます。 いただいた回答を元に、しっかりと勉強させて頂きます。

その他の回答 (2)

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.2

質問の直接の答えにはなりませんが、最も簡単なのは、 サイトのindex.htmlを消して、index.phpにすべての処理をさせること。 index.phpがDirectory Indexにあれば、アクセスした /{user_name}/test/?option1=ok が環境変数PATH_INFOに[/{user_name}/test/]とQUERY_STRINGSに[option=ok]と格納されているので、それを使えばよい。  

mmei
質問者

お礼

早々のご回答ありがとうございます。 ご提案いただいた方法についてもきちんと確認し動作を理解させていただきます。

  • mikemike7
  • ベストアンサー率87% (97/111)
回答No.1

2で user=としたいのか、 screen_name=としたいのかわかりませんが、 以下に変えたらどうでしょうか。 user=の場合 RewriteRule (.+)$ index.php?mode=user&user=$1 [QSA,L] screen_nameの場合 RewriteRule (.+)$ index.php?mode=user&screen_name=$1 [QSA,L] オプションで「QSA」とすると、 クエリ文字列とマッチした内容を付け足してくれます。

mmei
質問者

お礼

早々のご回答ありがとうございます。 記載方法に誤りがあり申し訳ございません。 実施したい変換を絞り込むと以下の場合となります。 変換前 http://hogehoge.com/{user_name}/test/?option1=ok   ↓ 変換後 http://hogehoge.com/index.php?user={user_name}&optione1=ok 現状の設定 RewriteRule (.+)/test/\?option1=(.*)$ index.php?user=$1&option1=$2 [L] ●質問のポイント 変換前のURLには仕様上、どうしても"?"が入ってしまうのですが、 それをRewriteRuleの正規表現で記載できず困っております。 書籍を呼んだところでは、?の正規表現は\?であると記載があったのですが、 動作しませんでした。

関連するQ&A

専門家に質問してみよう