Пользовательский URL-помощник перенаправляет с помощью метода get

В моем codeigniter application/helper/MY_url_helper я хотел бы иметь возможность добавить '?&route=' . $uri я хотел бы иметь возможность использовать свой '?&route=' после index.php, но перед первой папкой/функцией.

Но каждый раз, когда я нажимаю на свою ссылку, URL-адрес меняется, но страница остается прежней?

Вопрос: Как я могу добавить в свой помощник '?&route=' . $uri, но сделать так, чтобы он по-прежнему перенаправлял на текущую страницу каждый раз, даже когда я нажимаю на ссылку, URL-адрес меняется, но страница остается прежней?

redirect('common/dashboard');

URL http://localhost/project/admin/?&route=common/dashboard

Я пробовал это с маршрутами и той же проблемой.

<?php

if ( ! function_exists('redirect'))
{
function redirect($uri = '', $method = 'auto', $code = NULL)
{
    //if ( ! preg_match('#^(\w+:)?//#i', $uri))
    //{
        $uri = site_url('?&route=' . $uri);
    //}

    // IIS environment likely? Use 'refresh' for better compatibility
    if ($method === 'auto' && isset($_SERVER['SERVER_SOFTWARE']) && strpos($_SERVER['SERVER_SOFTWARE'], 'Microsoft-IIS') !== FALSE)
    {
        $method = 'refresh';
    }
    elseif ($method !== 'refresh' && (empty($code) OR ! is_numeric($code)))
    {
        if (isset($_SERVER['SERVER_PROTOCOL'], $_SERVER['REQUEST_METHOD']) && $_SERVER['SERVER_PROTOCOL'] === 'HTTP/1.1')
        {
            $code = ($_SERVER['REQUEST_METHOD'] !== 'GET')
                ? 303   // reference: http://en.wikipedia.org/wiki/Post/Redirect/Get
                : 307;
        }
        else
        {
            $code = 302;
        }
    }

    switch ($method)
    {
        case 'refresh':
            header('Refresh:0;url='.$uri);
            break;
        default:
            header('Location: '.$uri, TRUE, $code);
            break;
    }
    exit;
}
}

.htaccess

Options +FollowSymLinks
Options -Indexes
DirectoryIndex index.php
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

Обновление:

Версия Codeigniter с использованием 3

В моей конфигурации я сейчас использую

Пробовал с

$config['uri_protocol'] = 'REQUEST_URI';

А также

$config['uri_protocol'] = 'QUERY_STRING';

Но тогда теперь говорят, что страница не найдена?

Хотя страница есть.

Также "common" будет папкой

А "приборная панель" будет контроллером.

Все контроллеры имеют первую букву в верхнем регистре Dashboard.php

Примечание. Я попытался включить строки запросов в config.php, но это не работает так, как мне нужно.


person Mr. ED    schedule 19.06.2015    source источник


Ответы (1)


Первые шаги, которые я должен был сделать, чтобы решить это, были

В маршрутах.php

$get_route_method = 'route=';
$route[$get_route_method . 'common/dashboard'] = "common/dashboard/index";

Кажется, теперь все работает нормально, когда я вручную добавил маршрут в application/config/route.php

Затем в MY_url_helper в application/helper.php $uri = site_url('index.php?route=' . $uri);

<?php

if ( ! function_exists('redirect'))
{
function redirect($uri = '', $method = 'auto', $code = NULL)
{
    if ( ! preg_match('#^(\w+:)?//#i', $uri))
    {
        $uri = site_url('index.php?route=' . $uri);
    }

    // IIS environment likely? Use 'refresh' for better compatibility
    if ($method === 'auto' && isset($_SERVER['SERVER_SOFTWARE']) && strpos($_SERVER['SERVER_SOFTWARE'], 'Microsoft-IIS') !== FALSE)
    {
        $method = 'refresh';
    }
    elseif ($method !== 'refresh' && (empty($code) OR ! is_numeric($code)))
    {
        if (isset($_SERVER['SERVER_PROTOCOL'], $_SERVER['REQUEST_METHOD']) && $_SERVER['SERVER_PROTOCOL'] === 'HTTP/1.1')
        {
            $code = ($_SERVER['REQUEST_METHOD'] !== 'GET')
                ? 303   // reference: http://en.wikipedia.org/wiki/Post/Redirect/Get
                : 307;
        }
        else
        {
            $code = 302;
        }
    }

    switch ($method)
    {
        case 'refresh':
            header('Refresh:0;url='.$uri);
            break;
        default:
            header('Location: '.$uri, TRUE, $code);
            break;
    }
    exit;
}
}
person Mr. ED    schedule 20.06.2015