2013-07-24 6 views
1

У меня возникают проблемы с переменными $ _GET с включенным mod_rewrite. У меня есть следующий .htaccess:

RewriteEngine On 
RewriteRule ^/?Resource/(.*)$ /$1 [L] 
RewriteRule ^$ /home [redirect] 
RewriteRule ^([a-zA-Z]+)/?([a-zA-Z0-9/]*)$ /app.php?page=$1&query=$2 [L] 

и app.php является:

<?php 
require("controller.php"); 
$app = new Controller(); 

и controller.php является:

<?php 
require("model.php"); 
require("router.php"); 

class Controller{ 

//--------Variables------------ 
    private $model; 
    private $router; 
//--------Functions------------ 

    //Constructor 
    function __construct(){ 
     //initialize private variables 
     $this->model = new Model(); 
     $this->router = new Router(); 

     $page = $_GET['page']; 

     //Handle Page Load 
     $endpoint = $this->router->lookup($page); 
     if($endpoint === false) { 
      header("HTTP/1.0 404 Not Found"); 
     }else { 
      $this->$endpoint($queryParams); 
     } 
    } 
    private function redirect($url){ 
     header("Location: /" . $url); 
    } 

    //--- Framework Functions 
    private function loadView($view){ 
     require("views/" . $view . ".php"); 
    } 
    private function loadPage($view){ 
     $this->loadView("header"); 
     $this->loadView($view); 
     $this->loadView("footer"); 
    } 

    //--- Page Functions 
    private function indexPage(){ 
     $this->loadPage("home"); 
    } 
    private function controlPanel(){ 
     echo "Query was " . $code; 
     /* 
     if($this->model->set_token($code)){ 
      $user = $this->model->instagram->getUser(); 
     }else{ 
      echo "There was an error generating the Instagram API settings."; 
     } 
     */ 
     $this->loadPage("controlpanel"); 
    } 
    private function autoLike(){ 
     $this->loadPage("autolike"); 
    } 
    private function about(){ 
     $this->loadPage("about"); 
    } 
} 

Так пример URL, который я мог бы is /app.php?page=controlpanel & query = null, который будет переписан как/controlpanel. Проблема в том, что у меня есть другая страница, которая отправляет форму в/controlpanel, что приводит к URL-адресу, например/controlpanel? Code = somecode.

То, что я пытаюсь сделать, это получить $ _GET ['code'], и я не могу этого сделать. Может ли кто-нибудь помочь? Извините заранее за небольшую свалку кода.

ответ

4

Изменить

RewriteRule ^([a-zA-Z]+)/?([a-zA-Z0-9/]*)$ /app.php?page=$1&query=$2 [L] 

в

RewriteRule ^([a-zA-Z]+)/?([a-zA-Z0-9/]*)$ /app.php?page=$1&query=$2 [L,QSA] 

QSA является добавление в строке запроса

Из документов

«Когда замена URI содержит строку запроса, поведение по умолчанию RewriteRule - это отменить существующую строку запроса и заменить ее вновь созданной. Использование флага [QSA] приводит к объединению строк запроса. "

+0

@jcsanyi Хорошо лаконичное описание поведения – Orangepill

+0

@jcsanyi Я включил его в ответ – Orangepill

Смежные вопросы