htaccess获得额外的php参数

时间:2016-07-28 13:11:55

标签: php .htaccess arguments parameter-passing

我的.htaccess代码

RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)/$ index.php?key=$1

我的 index.php 代码如下所示

<?php

$key=isset($_GET['key']) ? $_GET['key'] : 'home';
if( in_array( $key, array('home','about','terms') ) ){
   include("$key.php");
}else{
   include("profile.php");
}
?>

何时使用“http://localhost/project_dir/home”工作正常(将home分配给参数'?key')。但我想传递额外的论据,如“http://localhost/project_dir/home?a=abc123

我怎样才能得到参数“a”($_GET['a'])?

1 个答案:

答案 0 :(得分:1)

查看flags - in particular, QSA

  

<强> QSA | qsappend

     

当替换URI包含查询字符串时,RewriteRule的默认行为是丢弃现有的查询字符串,并将其替换为新生成的查询字符串。使用[QSA]标志会导致查询字符串合并。

     

考虑以下规则:

RewriteRule "/pages/(.+)" "/page.php?page=$1" [QSA]
     

使用[QSA]标记,/pages/123?one=two的请求将映射到/page.php?page=123&one=two。如果没有[QSA]标志,相同的请求将映射到/page.php?page=123 - 也就是说,现有的查询字符串将被丢弃。

     
    

Apache手册,©2016 Apache Software Foundation,Apache License 2.0

  

因此,请将.htacess规则更改为:

RewriteRule ^([a-zA-Z0-9_-]+)/$ index.php?key=$1 [QSA]