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

用户网址请求:

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

改写至:

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

可能的问题:

  • 不获取 $1、$2 的值
  • 不匹配模式(尽管模式是当前的)
  • 不重定向到替代品(内部)

主要问题:

得不到$_GET价值

测试.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

此外,您不需要上述所有三个规则。第一个应该涵盖第一个和第二个。因此,您可以删除第二个。假设这些是您的不同测试,我只是将其保留在那里。

更新:

.php扩展名添加到目标 URI,即替换/include/test?$1=$2/include/test.php?$1=$2

于 2013-08-11T04:18:11.090 回答