在查询字符串中作为变量传递的url的一部分错误地包括其查询字符串

时间:2010-10-05 03:58:27

标签: .htaccess mod-rewrite url-rewriting

我正在将网站迁移到另一台服务器,但我遇到了问题。

该站点使用.htaccess重定向到index.php,因此index.php可以使用$ _SERVER ['REQUEST_URI']加载正在调用的任何页面...但是我找不到旧服务器的位置。 htaccess规则......所以我自己做。

我使用的.htacess规则是:

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ /index.php/?$1 [L,QSA]

网址为newsiteurl.com/racintv/video_view?channel_id=2

并通过在index.php页面上打印出params来获取

  

数组([page] => racintv / video_view?channel_id = 2)

它应该加载video_view页面并传递channel_id(加载视频播放列表)。情况并非如此,因为它认为要加载的页面实际上是/ video_view?channel_id = 2

在旧网站上,我打印出它打印的index.php页面上的参数

  

数组([page] => racintv / video_view)

并在视频正确加载时正确传递?channel_id = 2

我的.httacess中缺少什么?pass_id = 2正确?

以下是解析URI的PHP代码

$path_info = trim(substr($_SERVER['REQUEST_URI'],1)) ;
$var_array = explode('/',$path_info);
$num_vars = sizeof($var_array);
if ($num_vars==1 or !($var_array[1])) {// in the form of '/foo' or '/foo/'
  if ($var_array[0] && ! strstr($var_array[0],'index')) {
    $var_array[1] = 'index'; // use index as the default page
    $num_vars = 2;
  }
}
if ($num_vars >= 2) { // in the form of '/foo1/foo2[/foo3 ...]'
  $tmp_array = explode('.',$var_array[1]);
  $var_array[1] = $tmp_array[0];
  $page = $var_array[0] .'/'.$var_array[1];
  $vars['page'] = $page;
  $q_str = '';
  for ($i=2;$i<$num_vars;$i++) {
    $key = $var_array[$i];
    $value = $var_array[++$i];
    if ($key && $value) {
      $vars[$key] = $value;
      $q_str .= "$key=$value&";
      $$key=$value;
    }
  }
}

//搜索引擎友好网址解析结束

1 个答案:

答案 0 :(得分:0)

缺少页面参数:

RewriteRule ^(.+)$ /index.php/?page=$1 [L,QSA]