質問するログイン新規登録

回答編集履歴

3

見直し

2018/04/18 07:18

投稿

退会済みユーザー
answer CHANGED
@@ -1,15 +1,25 @@
1
1
  デバッグするためにログレベルを調整してから観察してほしいです。
2
2
  [Apache mod_rewriteをデバッグする方法 | CODE Q&A [日本語]](https://code.i-harness.com/ja/q/92fc54)
3
3
  話はそこから。
4
+ どの条件にヒットして、どう書き換えたのかをerror_logに出力させれば、
5
+ ここじゃない別の条件でヒットしている可能性もあります。
4
6
 
7
+ 以後、テストしてないこともあり、ちょっと自信なし。
8
+
5
- ひとつ誤解があって、
9
+ ~~ひとつ誤解があって、
6
10
  RewriteCondは書き換えを行うべき条件を記述するところであって、
7
11
  パターンマッチングまでは出来ますが一部マッチング箇所を記憶するような機能はありません。
8
- それができるのはRewriteRuleの中だけです。
12
+ それができるのはRewriteRuleの中だけです。~~
13
+ ここ、早とちりでした。
14
+ $1~$nはRewriteRuleでの後方参照、%1~%nはRewriteCondでの後方参照、とのことでした。
15
+ 失礼しました。[RewriteCond Directive](http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecond)
9
16
 
10
17
  ```
11
- RewriteCond %{QUERY_STRING} ^No=[0-9]{16}&ID=[0-9]{8}$
18
+ RewriteCond "%{QUERY_STRING}" "^No=[0-9]{16}&ID=[0-9]{8}$"
12
- 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]
19
+ 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]
13
20
  ```
14
21
  とかですかね、試してないのですけども。
22
+ 公式ドキュメントでダブルクォートで括っているサンプルをよく見かけるので括ってみたとか、
15
- QUERY_STRINGにつながる「?」がPCRE正規表現で引っかかるならエスケープが必要かもしれないので足してみます
23
+ QUERY_STRINGにつながる「?」がPCRE正規表現で引っかかるならエスケープが必要かもしれないので足してみたりとか
24
+
25
+ でも、rewriteのトレースログを見ないとなんとも言えないですね。

2

加筆修正

2018/04/18 07:18

投稿

退会済みユーザー
answer CHANGED
@@ -11,4 +11,5 @@
11
11
  RewriteCond %{QUERY_STRING} ^No=[0-9]{16}&ID=[0-9]{8}$
12
12
  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]
13
13
  ```
14
- とかですかね、試してないのですけども。
14
+ とかですかね、試してないのですけども。
15
+ QUERY_STRINGにつながる「?」がPCRE正規表現で引っかかるならエスケープが必要かもしれないので足してみます。

1

加筆修正

2018/04/18 06:42

投稿

退会済みユーザー
answer CHANGED
@@ -1,3 +1,14 @@
1
1
  デバッグするためにログレベルを調整してから観察してほしいです。
2
2
  [Apache mod_rewriteをデバッグする方法 | CODE Q&A [日本語]](https://code.i-harness.com/ja/q/92fc54)
3
- 話はそこから。
3
+ 話はそこから。
4
+
5
+ ひとつ誤解があって、
6
+ RewriteCondは書き換えを行うべき条件を記述するところであって、
7
+ パターンマッチングまでは出来ますが一部マッチング箇所を記憶するような機能はありません。
8
+ それができるのはRewriteRuleの中だけです。
9
+
10
+ ```
11
+ RewriteCond %{QUERY_STRING} ^No=[0-9]{16}&ID=[0-9]{8}$
12
+ 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]
13
+ ```
14
+ とかですかね、試してないのですけども。