CodeIgniter: Можно ли удалить index.php без использования .htaccess?

По техническим причинам я не хочу использовать .htaccess для удаления index.php из URL в CodeIgniter. Я видел раздел маршрута. Я также пробовал с таким маршрутом:

$route['(:any)'] = 'index.php/$1';

Но это не работает.

Можно ли удалить index.php с помощью роутера в CodeIgniter?


person itskawsar    schedule 24.06.2013    source источник
comment
да, вы можете использовать routes, это все равно будет работать, НО index.php по-прежнему будет отображаться в URL-адресе, htaccess дает вам красивый URL-адрес, который вы хотите, и удаляет index.php при каждом запросе в зависимости от того, что определено для вас' о htaccess правилах   -  person tomexsans    schedule 24.06.2013
comment
О каком именно техническом ограничении вы говорите?   -  person djthoms    schedule 24.06.2013
comment
если я изменю сервер или путь, мне нужно изменить свойство RewriteBase в .htaccess. иногда у меня нет полномочий это изменить :( @djthoms   -  person itskawsar    schedule 24.06.2013
comment
спасибо @tomexsans. Тогда я не могу удалить index.php из URL по маршрутам? И мои маршруты не работают. например, у меня есть контроллер home, и я буду просматривать его как sitename/home. но он показывает не найденное сообщение. :(   -  person itskawsar    schedule 24.06.2013
comment
вы не можете удалить его из URL-адреса без .htaccess, это точка входа, на самом деле .htaccess не удаляет его, а просто скрывает из URL-адреса   -  person ikhsan    schedule 24.06.2013
comment
удаление index.php из URL-адреса может быть выполнено ТОЛЬКО с помощью htaccess   -  person machineaddict    schedule 25.06.2013
comment
проверьте мой ответ, вы не можете использовать .htaccess, тогда вам понадобится виртуальный хост или отредактируйте свой DNS, чтобы он указывал на index.php! это серверная штука, а не php/framework   -  person Zalaboza    schedule 12.03.2014


Ответы (2)


Is it possible to remove index.php without using .htaccess?

Нет. это нечто большее, чем php или codeigniter, это серверная штука.

Почему ?

Что происходит, когда пользователь пытается перейти на localhost/codeigniter/welcome/index?

MVC в основном скрывает все ваши файлы php внутри своих папок. и предоставить любому пользователю только один способ взаимодействия с вашим кодом через index.php

что случилось

  1. HTTP-запрос к вашему сайту, направленный на index.php
  2. index.php загрузить загрузчик codeigniter и вызвать маршрутизатор codeigniter
  3. маршрутизатор ищет введенный URL-адрес (приветствие/индекс), затем переходите к файлу приветствия из папки контроллера и вызываете функцию индекса.

это просто то, что делают все платформы MVC: скройте свой код и используйте один передний файл для обработки всех запросов и перенаправления их с помощью класса маршрутизатора.

поэтому, если вы хотите hide index.php, вам нужно найти способ сообщить вашему серверу, чтобы он просто перенаправлял любой вызов на index.php.

index.php — это дверь доступа к вашему веб-сайту, и ваш сервер должен знать, что все запросы должны отправляться на него. так или иначе, и поэтому index.php/ должен существовать в URL-адресе ur или использовать некоторую конфигурацию сервера для перенаправления вызовов на него. но он всегда загружен

person Zalaboza    schedule 12.03.2014
comment
Ответ отличный, но не очищенный. Что на самом деле делает маршрутизатор CodeIgniter? У меня есть несколько приложений с большим количеством настраиваемой маршрутизации с использованием маршрутизатора CodeIgniter. Можете ли вы упомянуть, почему я не могу удалить index.php, но другие строки из URL-адреса. - person itskawsar; 13.03.2014
comment
route - это класс. Все, что он делает, это получает PHP $_SERVER['url'] и взрывает его, чтобы найти правильный контроллер. я думаю, что вы упускаете одну вещь... каждая страница, которую вы открываете в своем проекте codeigniter, открывается внутри index.php.. index.php - единственный общедоступный файл. другие файлы включены в index.php, поэтому все ваши контроллеры и т. д. включены include('controller/welcome)` внутри index.php, а класс, который обрабатывает это, включает.. это класс маршрута - person Zalaboza; 13.03.2014
comment
Теперь я понял вашу точку зрения, класс маршрутизатора также находится внутри index.php. После запуска index.php класс маршрутизатора работает. Спасибо. - person itskawsar; 13.03.2014

Я сделал следующее для работы с маршрутами, которые не требуют наличия index.php в вашем URL-адресе.

  1. Я переименовал index.php в index_ci.php из соображений безопасности.
  2. В файле .htaccess у меня есть следующее:

    DirectoryIndex index_ci.php index.html
    RewriteCond %{REQUEST_FILENAME} !-f  
    RewriteCond %{REQUEST_FILENAME} !-d  
    RewriteCond $1 !^(index_ci\.php) # do not allow direct access  
    RewriteRule ^(.*)$ index_ci.php/$1 [L,QSA]
    
  3. Мой routes.php теперь принимает URL-адреса без префикса index.php. Пример:

    $route['welcome'] = "welcome";
    
person machineaddict    schedule 24.06.2013
comment
@lighta: прочитал его вопрос, как только увидел, что ты сказал :D - person machineaddict; 25.06.2013
comment
@machineaddict: спасибо. но я могу сделать это с .htaccess, мне просто нужно знать способ без использования .htaccess и только с маршрутизатором CodeIgniter :) - person itskawsar; 25.06.2013
comment
Просто невозможно. Неважно, это CodeIgniter, другой фреймворк или чистые php-скрипты. Перезапись URL происходит на уровне apache, вы не можете сделать это в php. - person machineaddict; 25.06.2013