在htaccess规则之后在PHP中获取参数

时间:2016-02-14 15:32:29

标签: php .htaccess

以下案例的htaccess规则是什么:

我将用户重定向到此页面:
system/abc123/step1

没有规则可能是:
system.php?id=abc123&step=step1

但是如何通过$_GET传递两个参数?

  • ABC123

  • 步骤1

非常感谢。

2 个答案:

答案 0 :(得分:1)

我在寻找的是:

在我的.htaccess中:

RewriteEngine on
RewriteRule ^system/(.+)/(.+)$  system?token=$1&step=$2 [L]

在我的system.php页面中:

$QUO_Token = $_GET['token']; // abc123
$QUO_Step = $_GET['step'];   // step1

答案 1 :(得分:0)

您自己的解决方案很好,它可以正常工作,无需触及PHP代码。

但是,对于我的脚本,我采用了不同的方法:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .  /processUrl.php [NC, L]

通过这种方式,所有(非Foud)传入请求全部重定向到 processUrl.php ,其中有如下代码:

$uri = (object) parse_url( $_SERVER['REQUEST_URI'] );
$uri->thread = explode( '/', substr($uri->path, 1) );

if( 'system' == $uri->thread[0] )
{
    $_GET['id']   = $uri->thread[1];
    $_GET['step'] = $uri->thread[2];
    include( 'system.php' );
}
elseif( 'browse' == $uri->thread[0] )
{
    // Other condition here
}
elseif( isset( $uri->query ) )
{
    // Process ORIGINAL $_GET
}
else
{
    include( 'Your404NotFoundPage.php' );
}

由于以下原因,我更喜欢上述方法:

  1. 透明度:我可以直接在代码中看到如何处理不同的URI;
  2. 灵活性:我可以在不修改 .htaccess 文件的情况下添加条件或处理新网址。