質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Q&A

解決済

2回答

1546閲覧

RewriteRuleでパラメータが引き継げない

tkshp

総合スコア174

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

0グッド

0クリップ

投稿2018/04/18 04:57

編集2018/04/18 05:28

前提・実現したいこと

リクエストのパラメータをリダイレクト先にも引き継がせるようなRewriteRuleを作成したのですが、
リダイレクト先でパラメータが引き継げませんでした。
ご教示のほどお願い致します。

該当のソースコード

RewriteCond %{QUERY_STRING} ^No=([0-9]{16})&ID=([0-9]{8})$ RewriteRule ^test/test.php$ http://192.〇.〇/cgi-bin/sample.php?forward=detail&no=%1 [R]

下記でアクセス。
http://10.〇.〇/test/test.php?No=2000010132801648&ID=20000101

リダイレクト後
http://192.〇.〇/cgi-bin/sample.php?forward=detail&no=

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/04/18 06:28

.htaccess で記述しているのだとしたら差し支えない範囲で全部見せてほしい
guest

回答2

0

自己解決

日本語のコメントが入っていたせいで挙動がおかしくなってました。
日本語のコメントを消しました。

投稿2018/04/18 07:25

tkshp

総合スコア174

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

デバッグするためにログレベルを調整してから観察してほしいです。
Apache mod_rewriteをデバッグする方法 | CODE Q&A [日本語]
話はそこから。
どの条件にヒットして、どう書き換えたのかをerror_logに出力させれば、
ここじゃない別の条件でヒットしている可能性もあります。

以後、テストしてないこともあり、ちょっと自信なし。

ひとつ誤解があって、
RewriteCondは書き換えを行うべき条件を記述するところであって、
パターンマッチングまでは出来ますが一部マッチング箇所を記憶するような機能はありません。
それができるのはRewriteRuleの中だけです。

ここ、早とちりでした。
$1~$nはRewriteRuleでの後方参照、%1~%nはRewriteCondでの後方参照、とのことでした。
失礼しました。RewriteCond Directive

RewriteCond "%{QUERY_STRING}" "^No=[0-9]{16}&ID=[0-9]{8}$" RewriteRule ^test/test.php?No=([0-9]{16})&ID=([0-9]{8})$ http://192.〇.〇/cgi-bin/sample.php?forward=detail&no=$1&ID=$2 [R=301]

とかですかね、試してないのですけども。
公式ドキュメントでダブルクォートで括っているサンプルをよく見かけるので括ってみたとか、
QUERY_STRINGにつながる「?」がPCRE正規表現で引っかかるならエスケープが必要かもしれないので足してみたりとか。

でも、rewriteのトレースログを見ないとなんとも言えないですね。

投稿2018/04/18 06:33

編集2018/04/18 07:18
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tkshp

2018/04/18 07:01

ご回答ありがとうございます。 RewriteCondでマッチング箇所は記憶できている気がします。 実際、別のコードでリクエストにクエリを付けなくても、リダイレクト先に、 RewriteCondのマッチング箇所が拾えていました。 https://qiita.com/saitoryc/items/b73c55300a09ccb007e8
退会済みユーザー

退会済みユーザー

2018/04/18 07:19

机上で考えてもいいけど、ズバリrewrite時のログを追ってほしい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問