изменить URL в codeigniter - PullRequest
       1

изменить URL в codeigniter

2 голосов
/ 10 августа 2011

У меня есть URL-адрес, похожий на

mysite.com/index.php/home/user_get

, который отлично работает.

однако мой клиент теперь хочет иметь хэш-банг в URL-адресе

mysite.com/username

Есть ли в коде воспламенитель позволяет мне использовать этот тип URL, когда я вошел в систему?

Ответы [ 3 ]

5 голосов
/ 10 августа 2011

Чтобы избавиться от префикса index.php, вам нужно включить mod_rewrite в вашем конфигурационном файле apache и использовать htaccess для перезаписи URL.

Чтобы включить mod_rewrite, откройте файл httpd.conf и раскомментируйте следующую строку

LoadModule rewrite_module modules/mod_rewrite.so

Чтобы переписать URL-адреса, вы должны поместить файл .htaccess (с точным названием «.htaccess») в корень сайта и добавить в него следующие строки:

RewriteEngine On
RewriteCond $1 !^(index\.php|images|scripts|css|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

Третья строкаЭто важно, так как позволяет статическому контенту обслуживаться.Вам придется изменить его, чтобы он соответствовал структуре вашего проекта.

Думаю, что сделать пользователя зависимым невозможно.См. документация mod_rewrite для справки

ОБНОВЛЕНИЕ: Если речь идет только об использовании mysite.com/username вместо mysite.com/index.php/home/user_get, вы можете определить контроллер username с помощью одного метода

public function index(){
    redirect('/home/user_get', 'refresh');
}

Если вы собираетесь поддерживать нескольких пользователей, например, mysite.com/john, mysite.com/dave, это может помочь

RewriteEngine On
RewriteCond $1 ^(index\.php|images|scripts|css|robots\.txt)
RewriteRule $1 [L]

RewriteCond $1 !^(products|categories)
RewriteRule ^(.*)$ /index.php/users/$1 [L]

RewriteRule ^(.*)$ /index.php/$1 [L]

, это перенаправит любые запросы неизвестнымконтроллер для пользователя контроллера.Вы должны будете перечислить все свои контроллеры в (products|categories).В контроллере пользователей у вас будет имя пользователя в качестве параметра, просто если ваш URL будет / users / username.Обратите внимание, что это не проверено.

0 голосов
/ 11 августа 2011

Я в шоке, ни один человек не ответил на это со ссылкой на документацию Codeigniter для класса Router.Что вы хотите сделать, так это следовать инструкциям для пользовательского файла .htaccess с именем , предоставленным Джоном выше .

. В вашем .htaccess требуется только следующее:

RewriteEngine On
RewriteCond $1 !^(index\.php|images|scripts|css|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

Документация по Codeigniter URI Routing находится здесь здесь .Я предполагаю, что / username означает, что вы хотите иметь возможность перенаправлять разные имена пользователей на разные страницы, на страницу профиля или что-то в этом роде.

В вашем файле application/config/routes.php добавьте следующие строки:

// Insert any other routes you don't want hijacked here

// Example - a contact page.
$route['contact'] = "pages/fetch/contact"; 

$route['(:any)'] = "controller/method/$1";

$ 1 означает захват значения из (: any) и предоставление его в качестве аргумента вашей функции контроллера.Если вы хотите иметь возможность ссылаться на другие разделы сайта, такие как страница контактов, и он просто находится по адресу: / contact - тогда у вас возникнут проблемы с перехватом URL-адреса.

Нет необходимости делать что-либо еще или добавлять что-либо к каким-либо контроллерам.

0 голосов
/ 10 августа 2011

Как удалить index.php из URL хорошо документировано в других местах.

Для обработки URL-адресов, таких как http//domain.com/myusername, <a href="http://domain.com/yourusername" rel="nofollow">http://domain.com/yourusername</a>, <a href="http://domain.com/theirusername" rel="nofollow">http://domain.com/theirusername</a>, вы можете сделать что-то вроде этого:

// in config/routes.php
   $route['home'] = 'index';
   $route['404_override'] = 'user'; 

Другие контроллеры должны продолжать работать в обычном режиме, но сделайте кучу тестов, чтобы разобраться с этим.

// in controllers/user.php
    public function _remap($method, $params = array())
{
    if (method_exists($this, $method)) 
    {
        // detail urls can work as well
        // /myusername/posts, /myusername/friends, etc.
        $this->$method();
    }
    else 
    {
        $this->user_home();
    }
}
   function posts() {}
   function friends() {}
   function user_home()
   {
       if($this->uri->segment(2) != FALSE)
       {
           // this is either a 404, or you have a controller missing
           show_404();
       } else {

           $q = $this->db->get('users');
           if($q->num_rows() == 1)
           { 
              // show user info...
           } else {
              // this is IMPORTANT!! 
              show_404();
           }
       }
   }

В любом случае, это отправная точка для работы с ... (непроверенный код)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...