我在启用mod_rewrite的情况下获取$ _GET变量时出现问题。我有以下.htaccess:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [L]
我使用“AltoRouter”进行路由。
因此,我可能拥有的路线示例/login?redirect=localhost%2Fnetwork%2Fdashboard
将被重写为/login
。
我要做的是获取$_GET['redirect']
而我似乎无法做到这一点。有人可以帮忙吗?提前为一些代码转储道歉。
答案 0 :(得分:0)
您不会继续在AltoRouter中使用$ _GET。 查看here和here
您的问题可能是您不是generating URLs通过AltoRouter。
Alto Router称之为“反向路由” - 请查看源代码:
/**
* Reversed routing
*
* Generate the URL for a named route. Replace regexes with supplied parameters
*
* @param string $routeName The name of the route.
* @param array @params Associative array of parameters to replace placeholders with.
* @return string The URL of the route with named parameters in place.
*/
public function generate($routeName, array $params = array()) {
在URL中获取params的方法:
$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 :(得分: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'] )
答案 2 :(得分:0)
老问题,但你可以用$ _GET获得GET变量,但是你必须仍然匹配路线。即,如果路线不匹配,则脚本不会继续。
altorouter中的路线:
/login?redirect=localhost%2Fnetwork%2Fdashboard
会(如果你愿意,可以使用GET或POST):
$router->map('GET|POST','/login/*', 'controllerforthisroute', "login");
您可以<?php echo $_GET['redirect'] ?>
后获得:
localhost/network/dashboard
答案 3 :(得分:0)
老问题,但是处理Altorouter和查询字符串参数似乎并不容易。
正如作者here所述,不适合在Altorouter的$match['parameters']
中输出查询字符串参数来遵守REST原则。
查询字符串参数必须作为外部数据而不是Altorouter数据的一部分受到威胁。
这是一个简单的解决方案,用于在PHP全局$_GET
中检索URL查询字符串和注册参数:
// Register URL query string parameters in $_GET since Altorouter ROUTE doesn't deal with these.
$parts = parse_url($_SERVER['REQUEST_URI']);
if (isset($parts['query'])) {
parse_str($parts['query'], $_GET);
}
// now we can use $_GET
// echo $_GET['something'];