2015-05-27 2 views
0

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

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php [L] 

и я использую "AltoRouter" для маршрутизации.

Итак, пример маршрута, который у меня может быть, это /login?redirect=localhost%2Fnetwork%2Fdashboard, который был бы переписан как /login.

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

+0

Его последняя страница, перенаправленная на логин. Я хочу перенаправить его на ту же страницу после входа в систему. –

ответ

0

Эта функция помогла мне:

public static function _GET(){ 
    $__GET = array(); 
    $ru = $_SERVER['REQUEST_URI']; 
    $_get_str = explode('?', $ru); 
    if(!isset($_get_str[1])) return $__GET; 
    $params = explode('&', $_get_str[1]); 
    foreach ($params as $p) { 
     $parts = explode('=', $p); 
     $__GET[$parts[0]] = isset($parts[1])? $parts[1] : ''; 
    } 
    return $__GET; 
} 

и:

$__GET = App::_GET(); 
$url = urldecode($__GET['redirect']) 
0

Вы не используете $ _GET с AltoRouter. Посмотрите here и here

Ваша проблема может быть, что вы не generating URLs через AltoRouter.

Alto Router называет это "обратная маршрутизация" - смотрите на источник:

способ получить Params в URL:

$router = new AltoRouter(); 
$router->map('GET', '/', function() { .. }, 'home'); 

// assuming current request url = '/' 
$match = $router->match(); 

/* 
array(3) { 
    ["target"] => object(Closure)#2 (0) { } 
    ["params"] => array(0) { } 
    ["name"] => 'home' 
} 
*/ 

Другой пример

$router = new AltoRouter(); 

// map homepage 
$router->map('GET', '/', function() { 
    require __DIR__ . '/views/home.php'; 
}); 

// map user details page 
$router->map('GET', '/user/[i:id]/', function($id) { 
    require __DIR__ . '/views/user-details.php'; 
}); 

// match current request url 
$match = $router->match(); 

// call closure or throw 404 status 
if($match && is_callable($match['target'])) { 
    call_user_func_array($match['target'], $match['params']); 
} else { 
    // no route was matched 
    header($_SERVER["SERVER_PROTOCOL"] . ' 404 Not Found'); 
} 
+1

Я знаю это, но мне нравится получать '$ _GET ['redirect']' из url. –

+0

ваше правило перезаписи не будет переписывать ваш длинный URL-адрес для входа/входа. ваше правило перезаписи отправляет все URL-адреса, которые не соответствуют файлу index.php. Если у вас нет файла входа и вы получаете доступ к '/ login? Redirect = localhost% 2Fnetwork% 2Fdashboard', вы должны получать значения в $ _GET. Публикация всего файла .htaccess может быть хорошим следующим шагом. –

+0

Нет У меня есть страница входа в систему и маршрут '/ login' хорошо работает. Я просто хочу получить параметры после '/ login' как $ _GET. (Пример Fo получает параметр «redirect» из '/ login? Redirect = path/to'). –

0

Старый вопрос, но вы можете получить ГЭТ переменные так же, как раньше с $ _GET, но вы должны по-прежнему соответствовать маршруту. I.e., если маршрут не согласован, ваш скрипт не продолжается.

Маршрут в altorouter для:

/login?redirect=localhost%2Fnetwork%2Fdashboard 

будет ли это (вы можете использовать только GET или POST, если вам нравится):

$router->map('GET|POST','/login/*', 'controllerforthisroute', "login"); 

После вы можете сделать <?php echo $_GET['redirect'] ?> и получить:

localhost/network/dashboard