Як видалити "index.php" у шляху кодування


Відповіді:


90

Якщо ви використовуєте Apache, розмістіть .htaccess файл у вашій кореневій веб-каталозі, що містить:

RewriteEngine on
RewriteCond $1 !^(index\.php|[Javascript / CSS / Image root Folder name(s)]|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

Ще одна хороша версія розміщена тут:

http://snipplr.com/view/5966/codeigniter-htaccess/


2
+1 для посилання! Хоча довелося трохи погладити. отримав це з цим -> RewriteCond% {REQUEST_FILENAME}! -f RewriteCond% {REQUEST_FILENAME}! -d RewriteRule ^ (. *) $ index.php / $ 1 [QSA, L]
OrangeRind

мені чомусь довелося додати косу рису на початку RewriteCond. RewriteCond $1 !^\/(index\.php|assets|robots\.txt)
Генрі

З якоїсь причини, якщо ви маєте index.php в URL-адресі, він фактично не видаляється, він залишається там і продовжує працювати.
CMCDragonkai

1
Я використав усі можливі комбінації, і це все ще не працює для мене !!!!! як ти змусив це працювати ??
Рошди

Ваша установка Apache повинна бути налаштована для перевірки файлів .htaccess - переконайтеся, що це так.
Шон Віейра

60

У мене виникли великі проблеми із видаленням index.php. Як правило, наведений нижче .htaccess був протестований на декількох серверах і, як правило, працює:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]  

<Files "index.php">
AcceptPathInfo On
</Files>  

Якщо з цим не пощастить, то наступним кроком буде налаштування конфігураційного файлу. Спробуйте деякі інші протоколи URI, наприклад

| 'AUTO'            Default - auto detects
| 'PATH_INFO'       Uses the PATH_INFO
| 'QUERY_STRING'    Uses the QUERY_STRING
| 'REQUEST_URI'     Uses the REQUEST_URI
| 'ORIG_PATH_INFO'  Uses the ORIG_PATH_INFO

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

Якщо вам все-таки не пощастило, спробуйте змінити правило переписати, щоб включити свою папку. Це часто є проблемою, якщо ви використовуєте тимчасову URL-адресу на сервері розробників тощо:

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

Просто пограйте з цими параметрами, треба працювати. Також переконайтесь, що ваш індексний файл встановлено на:

$config['index_page'] = '';

Удачі!


Я подумав, що ваш перший код тут був рішенням для мене, але насправді це просто надсилання будь-якого URL-адреси, наприклад домена / * домену / index.php, він не надсилає домен / ласкаво просимо до вітального контролера. тоді хвилювався на секунду. спробуйте інші пропозиції зараз.
jsky

31

Майте файл.htaccess у кореневому каталозі програми, а також файл index.php. (Перевірте, чи правильне розширення htaccess, Bz htaccess.txt не працював для мене.)

І додайте до файлу .htaccess такі правила,

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]  

Потім знайдіть наступний рядок у файлі програми / config / config.php

$config['index_page'] = 'index.php';

Встановіть змінну порожню, як показано нижче.

$config['index_page'] = '';

Це все, це працювало на мене.

Якщо це не працює далі, спробуйте замінити наступну змінну цими параметрами ("AUTO", "PATH_INFO", "QUERY_STRING", "REQUEST_URI" та "ORIG_PATH_INFO") по черзі

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

3
дякую, я давно не в цьому не знаю чому, але ур спосіб працював, як масло: D
Ахмед Самі

1
Дякую MDeSilva. Ця публікація економить мій час.
санджі

1
Дякую. Це працює. До речі, мені не потрібно змінювати config.php.
Кам’яний

1
Дякую, цей мені допоміг, я використовував PATH_INFO з WAMP
T.Coutlakis

21

Подивіться у system\application\config\config.phpфайл, є змінна назваindex_page

Це повинно виглядати так

$config['index_page'] = "index.php";

змінити його на

$config['index_page'] = "";

Тоді, як згадувалося, вам також потрібно додати правило переписання у .htaccessфайл

Примітка: у CodeIgniter v2 цей файл було переміщено із системної папки в application\config\config.php


9

Усі вищезазначені методи не вдалися до мене, і тоді я виявив, що я не змінював AllowOverride None на AllowOverride All у моєму віртуальному файлі хоста за адресою / etc / apache2 / sites-available / default

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www
    <Directory />
            Options FollowSymLinks
            AllowOverride All    <---- replace None with All
    </Directory>
    <Directory /var/www >
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All   <---  replace None with All
            Order allow,deny
            allow from all
    </Directory>

     ...


Дякую вам велике, я також отримав цю AllowOverride None, тепер вона працює!
Віллі

Блог зараз відсутній, і я дуже хотів би його прочитати. Жодне з цих рішень для мене не працює ...
Кевін Біл

приголомшливий, врятував мені день.
JChow

6
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /codeigniter/index.php/$0 [PT,L]

після зміни RewriteRule. * index.php / $ 0 [PT, L] з назвою папки проекту "codeigniter" .моє працювати на мене. Дякую хлопцям за підтримку.


6

Крок 1 => Помістіть .htaccess файл у кореневу папку, де існують додатки та системні папки.

Крок 2 => Якщо ваш веб-шлях використовує підпапку типу - yourdomain.com/project/ -, використовуйте наступний код у файлі htaccess

RewriteEngine on
RewriteBase    /project/
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /project/index.php/$1 [L]

Якщо ваш веб-шлях використовує кореневу папку типу - yourdomain.com - тоді у файлі htaccess використовуйте наступний код

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

Спробувавши за допомогою першого з вищезазначених прикладів, працює лише на моєму корені, але не на навантаженні форми тощо. Я все одно намагаюся використовувати index.php в URL-адресах. Я буду розігруватися і повернутися до цього, якщо зможу його виправити
Сем,

Дякую @ Vinod.Я зійшов з розуму від цієї проблеми. Я так довго шукав в мережі, пробував різні рішення, але вони ніколи не працювали, поки я не натрапив на ваше рішення. Тепер мій проект CI працює, і він дав мені НОВУ НАДІЮ продовжувати роботу з CI. Дякую багато :)
gomesh munda

5

Просто думав, що можу додати

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

буде .htaccess і не забудьте відредагувати змінну програми / config.php таким чином:

замінити

$config['uri_protocol'] = AUTO 

з

$config['uri_protocol'] = REQUEST_URI

5
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L] 

Це обов'язково спрацює .. спробуйте


4

Переконайтесь, що ви ввімкнули mod_rewrite(я цього не зробив).
Для того, щоб:

sudo a2enmod rewrite  

Також замініть AllowOverride NoneнаAllowOverride All

sudo gedit /etc/apache2/sites-available/default  

Нарешті ...

sudo /etc/init.d/apache2 restart  

Мій .htaccess є

RewriteEngine on  
RewriteCond $1 !^(index\.php|[assets/css/js/img]|robots\.txt)  
RewriteRule ^(.*)$ index.php/$1 [L]  

Інший модуль мені потрібно , щоб включити був actions: stackoverflow.com/questions/14419757 / ...
Jasdeep Халса

4

Ідеальне рішення [тестується як на localhost, так і на реальному домені]

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L] 

3

Це .htaccess для одного з моїх проектів ІС:

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

Останній рядок повинен дати вам те, що вам потрібно, хоча ви можете або не знадобиться '/ projectFolder' залежно від того, як налаштована структура вашої папки. Удачі!



3

Як файл .htaccess, хорошим варіантом є використання файлу, передбаченого рамкою Kohana :

# Turn on URL rewriting
RewriteEngine On

# Installation directory
RewriteBase /

# Protect hidden files from being viewed
<Files .*>
    Order Deny,Allow
    Deny From All
</Files>

# Protect application and system files from being viewed
RewriteRule ^(?:application|system)\b.* index.php/$0 [L]

# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT]

Це добре продуманий .htaccess, який просто працює.


3

Є два способи вирішити index.php в URL-адресі для кодарійтера

1: У config / config.php Змінити код:

$config['index_page'] = 'index.php';

до

$config['index_page'] = '';

2: Створіть .htacess в кореневому шляху, якщо він не створений, Скопіюйте такий код: -

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

Збережіть це, а потім перевірте, чи у Вашому режимі Apache Configuration rewrite_module OR mod_rewrite увімкнено. Якщо не ввімкнено будь-ласка, (Найкращий підхід)!


Це правильно і прямо з документів CodeIgniter. Я також використовую цей метод.
Дьюальд Елс

2

Я тестував це на apache2 на багатьох різних хостингах, і він чудово працює.

використовувати цей htaccess

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]

бути впевнені , що у вас є enabled mod_rewirteзphpinfo();

потім зробіть це в config / config.php:

$config['index_url']    = '';
|
| 'AUTO'            Default - auto detects
| 'PATH_INFO'       Uses the PATH_INFO
| 'QUERY_STRING'    Uses the QUERY_STRING
| 'REQUEST_URI'     Uses the REQUEST_URI
| 'ORIG_PATH_INFO'  Uses the ORIG_PATH_INFO
|
*/
$config['uri_protocol'] = 'AUTO';

якщо це ще не працює, спробуйте змінити $config['uri_protocol']='AUTO' один із перелічених внутрішніх application/config/config.phpфайлів у рядку 40/54:

іноді я використовував: REQUEST_URIзамість AUTOабо "QUERY_STRING"для goDaddy розміщення


2

Подивіться в \application\config\config.php файл, там є змінна назваindex_page

Це повинно виглядати так

$config['index_page'] = "index.php";

змінити його на

$config['index_page'] = "";

Потім, як згадувалося, вам також потрібно додати таке правило переписати у такий .htaccessфайл:

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

Це працює для мене, сподіваюся, і ви.


2

Якщо ви перебуваєте на Linux та використовуєте сервер apache2, можливо, нам знадобиться перезаписати файл apache2.conf також поруч із змінами у .htaccess-файлі. Знайдіть файл конфігурації apache2 на /etc/apache2/apache2.conf .

Пошук у каталозі / var / www / Змінити AllowOverride None -> AllowOverride All

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory

1

розмістіть .htaccess файл у вашій кореневій веб-каталозі

Що б ви не підкоригували - якщо вищезгадане не буде виконано - воно не спрацює. Зазвичай його в папці System, він повинен бути в корені. Ура!


2
Провівши пару годин, я прочитав це і виявив свою помилку.
mohsin.mr

Я також витратив принаймні годину через цю «маленьку» хитрість. За замовчуванням .htaccess файли надходять у applicationкаталог замість root.
вадим

1

Я спробував багато рішень, але одне з яких я придумав, це таке:

DirectoryIndex index.php
RewriteEngine on

RewriteCond $1 !^(index\.php|(.*)\.swf|forums|images|css|downloads|jquery|js|robots  \.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php?$1 [L,QSA]

Це, якщо потрібно, видалить index.php з URL-адреси.


1

Я використовую ці рядки у .htaccessфайлі; яку я розміщую в кореневій папці

RewriteEngine on
RewriteRule ^(application|system|\.svn) index.php/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [QSA,L]

Тоді я можу отримати доступ до http://example.com/controller/function/parameter

замість http://example.com/index.php/controller/function/parameter


0

Це допоможе вам вставити цей код у папку програми у файлі .htacess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]  

<Files "index.php">
AcceptPathInfo On
</Files>
<IfModule mod_php5.c>
  php_value short_open_tag 1
</IfModule>

0

Цей зробив мені повну магію:

RewriteEngine on
RewriteBase /
# Hide the application and system directories by redirecting the request to index.php
RewriteRule ^(application|system|\.svn) index.php/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [QSA,L]

Сподіваюся, це допомагає!


0

Привіт Цей працював у мене

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /folder/index.php?/$1 [L]

а також це

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /folder/index.php?/$1 [L]

де папка - це ім'я підпапки, якщо ця програма для кодування програм розміщена як субдомен, наприклад, доменне ім’я / папка / index.php.

Сподіваюся, що працює для вас. Дякую.


0

Скопіюйте минулий наступний код у свій .htaccess

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

Хоча цей код може відповісти на питання, надаючи додатковий контекст стосовно того, чому та / або як цей код відповідає на питання, покращує його довгострокове значення.
Бенджамін В.

0
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /Foldername of your ci/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

0

Крок 1 :

Додайте це у файл htaccess

<IfModule mod_rewrite.c> 
RewriteEngine On 
#RewriteBase / 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^ index.php [QSA,L] 
</IfModule>

Крок 2:

Видаліть index.php у конфігураторі кодування

$config['base_url'] = ''; 
$config['index_page'] = '';

Крок 3:

Дозволити переопределення htaccess у конфігурації Apache (команда)

sudo nano /etc/apache2/apache2.conf та відредагуйте файл та змініть на

AllowOverride All

для папки www

Крок 4:

Увімкнено перезапис apache mod (Command)

переписати sudo a2enmod

Крок 5:

Перезапустити Apache (команда)

sudo /etc/init.d/apache2 restart
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.