изменить url в codeigniter

У меня есть URL-адрес, который выглядит

mysite.com/index.php/home/user_get 

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

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

 mysite.com/username 

Есть ли все равно, чтобы в воспламенителе кода я мог использовать этот тип url whren, вошедший в систему?

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

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

 LoadModule rewrite_module modules/mod_rewrite.so 

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

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

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

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

UPDATE: если вы просто используете 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. Обратите внимание, что это не проверено.

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

Чтобы обрабатывать URL-адреса, такие как http//domain.com/myusername, http://domain.com/yourusername , http://domain.com/theirusername вы можете сделать что-то вроде этого:

 // 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(); } } } 

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

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

Вам нужно только следующее в вашем .htaccess:

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

Информацию о маршрутизации URI Codeigniter можно найти здесь . Я предполагаю, что / 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-адрес будет уволен.

Не нужно ничего делать или добавлять что-либо к контроллерам.