0

私は書き直しに取り組んでいますが、うまくいきません。私はすでに2日間を無駄にしました。あなたの助けは高く評価されます。

RewriteRule test/(.*)/(.*)/$ /include/test?$1=$2   //not working
RewriteRule test/(\w+)/(\w+)/$ /include/test?$1=$2   //not working
RewriteRule ^test/(\w+)/(\w+)/$ /include/test?$1=$2  //not working

RewriteRule .* include/test.php?id=123     //working

PHPコードを試す

echo $_SERVER['PHP_SELF']   // include/test.php/id/1234 (after rewrite)
                            // expecting :  /include/test.php?id=1234

ユーザー URL によるリクエスト:

 http://www.example.com/include/test/id/1234

書き換える:

http://www.example.com/include/test.php?id=1234

考えられる問題:

  • $1、$2 の値を取得しない
  • パターンに一致しません (ただし、パターンは現在のものです)
  • 代用にリダイレクトしない (内部)

主な問題:

$_GET価値が得られない

Test.php

<?php
ini_set("display_errors",1);
echo $_GET['id'];
echo  $_SERVER['PHP_SELF'].'<br/>';
echo $_SERVER['PATH_INFO'];
?>

ご要望に応じて

http://www.example.com//include/test/id/1234

出力:

/include/test.php/id/1234
/id/1234
4

1 に答える 1

1

ルールは問題ないようです。唯一の問題は、テスト URI の末尾のスラッシュです: http://www.example.com/include/test/id/1234

してみてください:

RewriteRule test/(.*)/(.*)/?$ /include/test.php?$1=$2
RewriteRule test/(\w+)/(\w+)/?$ /include/test.php?$1=$2
RewriteRule ^test/(\w+)/(\w+)/?$ /include/test.php?$1=$2

また、上記の 3 つのルールすべてが必要なわけではありません。1 つ目は、1 つ目と 2 つ目の両方をカバーする必要があります。したがって、2番目のものを削除できます。これらがあなたの異なるテストであると仮定して、私はそれをそのままにしておきました。

アップデート:

宛先 URI に拡張子を追加.phpします。つまり/include/test?$1=$2/include/test.php?$1=$2

于 2013-08-11T04:18:11.090 に答える