Cách xóa “index.php” trong đường dẫn của codeigniter


Câu trả lời:


90

Nếu bạn đang sử dụng Apache, hãy đặt tệp .htaccess vào thư mục web gốc của bạn có chứa thông tin sau:

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

Một phiên bản tốt khác nằm ở đây:

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


2
+1 cho liên kết! Mặc dù đã phải điều chỉnh xung quanh một chút. đã hiểu điều này -> RewriteCond% {REQUEST_FILENAME}! -f RewriteCond% {REQUEST_FILENAME}! -d RewriteRule ^ (. *) $ index.php / $ 1 [QSA, L]
OrangeRind

vì một số lý do, tôi phải thêm dấu gạch chéo vào đầu RewriteCond. RewriteCond $1 !^\/(index\.php|assets|robots\.txt)
Henry

Vì một số lý do, nếu bạn có index.php trong URL, nó không thực sự bị xóa, nó vẫn ở đó và tiếp tục hoạt động.
CMCDragonkai

1
Tôi đã sử dụng tất cả các kết hợp có thể và nó vẫn không hiệu quả với tôi !!!!! Làm thế nào bạn có được nó để làm việc??
Roshdy

Cài đặt Apache của bạn cần được định cấu hình để kiểm tra tệp .htaccess - hãy đảm bảo đúng như vậy.
Sean Vieira

60

Tôi đã gặp một số vấn đề lớn với việc xóa index.php. Theo quy tắc chung, .htaccess dưới đây đã được thử nghiệm trên một số máy chủ và thường hoạt động:

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

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

Nếu bạn không gặp may với điều đó thì bước tiếp theo là điều chỉnh tệp cấu hình của bạn. Hãy thử một số giao thức URI khác, ví dụ:

| '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';

Nếu bạn vẫn không gặp may, hãy thử thay đổi quy tắc viết lại để bao gồm thư mục con của bạn. Đây thường là vấn đề nếu bạn sử dụng URL tạm thời trên máy chủ nhà phát triển, v.v.:

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

Chỉ cần thử với những tùy chọn này, một cái sẽ hoạt động. Ngoài ra, hãy đảm bảo rằng tệp chỉ mục của bạn được đặt thành:

$config['index_page'] = '';

Chúc may mắn!


Tôi nghĩ rằng mã đầu tiên của bạn ở đây là giải pháp cho tôi nhưng thực ra nó chỉ gửi bất kỳ url nào như domain / * tới domain / index.php, nó không phải là gửi miền / chào mừng đến bộ điều khiển chào mừng. đã phấn khích trong một giây sau đó. đang thử các đề xuất khác ngay bây giờ.
jsky

31

Có tệp the.htaccess trong thư mục gốc của ứng dụng, cùng với tệp index.php. (Kiểm tra xem phần mở rộng htaccess có đúng không, Bz htaccess.txt không hoạt động đối với tôi.)

Và Thêm các quy tắc sau vào tệp .htaccess,

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

Sau đó tìm dòng sau trong tệp ứng dụng / config / config.php của bạn

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

Đặt biến trống như bên dưới.

$config['index_page'] = '';

Đó là nó, nó đã làm việc cho tôi.

Nếu nó không hoạt động nữa, hãy thử thay thế biến sau bằng các tham số này ('AUTO', 'PATH_INFO', 'QUERY_STRING', 'REQUEST_URI' và 'ORIG_PATH_INFO') lần lượt

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

3
cảm ơn bạn, tôi đã thất bại trong việc này cho thời gian dunno dài tại sao nhưng ur cách làm việc như bơ: D
Ahmed Samy

1
Cảm ơn MDeSilva. Bài đăng này tiết kiệm thời gian của tôi.
sanji

1
Cảm ơn. Nó hoạt động. BTW, tôi không cần thay đổi config.php.
Stony

1
Cảm ơn, cái này giúp tôi, tôi sử dụng PATH_INFO với WAMP
T.Coutlakis

21

Hãy xem trong system\application\config\config.phptệp, có một biến có tênindex_page

Nó sẽ giống như thế này

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

thay đổi nó thành

$config['index_page'] = "";

Sau đó, như đã đề cập, bạn cũng cần thêm quy tắc ghi lại vào .htaccesstệp

Lưu ý: trong CodeIgniter v2 tệp này đã được chuyển ra khỏi thư mục hệ thống đến application\config\config.php


9

Tất cả các phương pháp trên đều không thành công đối với tôi và sau đó tôi thấy rằng tôi không thay đổi AllowOverride Không thành AllowOverride Tất cả trong tệp máy chủ ảo của tôi tại / 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>

     ...


Cảm ơn bạn rất nhiều, tôi cũng có AllowOverride Không, bây giờ nó hoạt động!
Willy

Bây giờ blog đã biến mất, và tôi rất thích đọc nó. Không ai trong số các giải pháp này đang làm việc cho tôi ...
Kevin Beal

tuyệt vời, đã cứu một ngày của tôi.
JChow

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

sau khi thay đổi RewriteRule. * index.php / $ 0 [PT, L] với tên thư mục dự án "codeigniter" .its làm việc cho tôi. Cảm ơn các bạn đã ủng hộ.


6

Bước 1 => Đặt tệp .htaccess của bạn vào thư mục gốc, nơi tồn tại các thư mục ứng dụng và hệ thống.

Bước 2 => Nếu đường dẫn web của bạn sử dụng thư mục con như - yourdomain.com/project/ - thì hãy sử dụng mã sau trong tệp htaccess

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

Nếu đường dẫn web của bạn sử dụng thư mục gốc như - yourdomain.com - thì hãy sử dụng mã sau trong tệp htaccess

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

Cố gắng sử dụng đầu tiên trong số các ví dụ trên chỉ hoạt động trên thư mục gốc của tôi, nhưng không vào mẫu tải vv vẫn sẽ cố gắng sử dụng index.php trong url Tôi sẽ chơi xung quanh và trở lại này nếu tôi có thể firugre nó ra
Sam

Cảm ơn @ Vinod. Tôi đã phát điên với vấn đề này. Tôi đã tìm kiếm trên mạng rất lâu, thử nhiều giải pháp khác nhau nhưng chúng không bao giờ hiệu quả cho đến khi tôi tìm thấy giải pháp của bạn. để tiếp tục với CI. Cảm ơn rất nhiều :)
gomesh munda

5

Chỉ nghĩ rằng tôi có thể thêm

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

sẽ là .htaccess và hãy nhớ chỉnh sửa biến application / config.php của bạn theo cách sau:

thay thế

$config['uri_protocol'] = AUTO 

với

$config['uri_protocol'] = REQUEST_URI

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

Điều này chắc chắn phải hoạt động .. hãy thử


4

Đảm bảo bạn đã bật mod_rewrite(tôi chưa bật).
Để kích hoạt:

sudo a2enmod rewrite  

Ngoài ra, hãy thay thế AllowOverride NonebằngAllowOverride All

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

Cuối cùng ...

sudo /etc/init.d/apache2 restart  

.Htaccess của tôi là

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

Một mô-đun Tôi cần thiết để cho phép là actions: stackoverflow.com/questions/14419757/...
Jasdeep Khalsa

4

Giải pháp hoàn hảo [được thử nghiệm trên localhost cũng như trên miền thực]

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

3

Đây là một .htaccess cho một trong những dự án CI của tôi:

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

Dòng cuối cùng sẽ cung cấp cho bạn những gì bạn cần, mặc dù bạn có thể cần hoặc không cần '/ projectFolder' tùy thuộc vào cách cấu trúc thư mục của bạn được thiết lập. Chúc may mắn!



3

Dưới dạng tệp .htaccess, một tùy chọn tốt là sử dụng tệp do Kohana Framework cung cấp :

# 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]

Đó là một truy cập .htaccess được suy nghĩ kỹ lưỡng và hoạt động.


3

Có hai cách để giải quyết index.php trong đường dẫn url cho codeigniter

1: Trong config / config.php Thay đổi mã:

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

đến

$config['index_page'] = '';

2: Tạo .htacess trong đường dẫn gốc nếu chưa được tạo, Sao chép đoạn mã sau: -

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

Lưu nó và sau đó kiểm tra cấu hình Apache của bạn rewrite_module HOẶC mod_rewrite đã được Bật. Nếu không, hãy bật. (Phương pháp tốt nhất)!


Điều này chính xác và trực tiếp từ tài liệu CodeIgniter. Tôi cũng sử dụng phương pháp này.
Dewald Els

2

Tôi đã thử nghiệm điều này trên apache2 trên nhiều hosting khác nhau và nó hoạt động rất tốt.

sử dụng htaccess này

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

hãy chắc chắn rằng bạn có enabled mod_rewirtevới mộtphpinfo();

sau đó thực hiện việc này trong 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';

nếu nó vẫn chưa hoạt động, hãy thử thay đổi $config['uri_protocol']='AUTO'thành một trong các application/config/config.phptệp bên trong được liệt kê trên dòng 40/54:

đôi khi tôi đã sử dụng: REQUEST_URIthay vì AUTOhoặc "QUERY_STRING"cho các lưu trữ goDaddy


2

Tìm trong \application\config\config.phptệp, có một biến có tênindex_page

Nó sẽ giống như thế này

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

thay đổi nó thành

$config['index_page'] = "";

Sau đó, như đã đề cập, bạn cũng cần thêm quy tắc ghi lại vào .htaccesstệp như sau:

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

Nó làm việc cho tôi, hy vọng bạn cũng vậy.


2

Nếu bạn đang sử dụng linux và sử dụng máy chủ apache2 thì chúng tôi có thể cần ghi đè tệp apache2.conf bên cạnh các thay đổi trên tệp .htaccess. Tìm tệp cấu hình apache2 trên /etc/apache2/apache2.conf .

Thư mục tìm kiếm / var / www / Change AllowOverride Không có -> AllowOverride Tất cả

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

1

đặt tệp .htaccess trong thư mục web gốc của bạn

Bất kỳ điều chỉnh nào bạn làm - nếu điều trên không được đáp ứng - nó sẽ không hoạt động. Thường thì nó nằm trong thư mục System, nó phải nằm trong thư mục gốc. Chúc mừng!


2
Sau khi dành vài giờ, tôi đọc nó và nhận ra sai lầm của mình.
mohsin.mr

Tôi cũng mất ít nhất một giờ đồng hồ vì thủ thuật “nho nhỏ” này. Theo mặc định, các tệp .htaccess nằm trong applicationthư mục thay vì gốc.
vadim

1

Tôi đã thử nhiều giải pháp nhưng giải pháp tôi nghĩ ra là:

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]

Điều này sẽ xóa index.php khỏi url theo yêu cầu.



0

Thao tác này sẽ giúp bạn dán mã này vào thư mục ứng dụng trong tệp .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

Điều này đã làm cho tôi hoàn toàn kỳ diệu:

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]

Hy vọng nó giúp!


0

Xin chào Cái này đã làm việc với tôi

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

cũng như điều này

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

trong đó thư mục là tên của thư mục con nếu ứng dụng mã hóa này được lưu trữ dưới dạng tên miền phụ, ví dụ tên miền / thư mục / index.php.

Hy vọng rằng sẽ làm việc cho bạn. Cảm ơn.


0

Sao chép mã sau đây trong .htaccess của bạn

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]

Mặc dù mã này có thể trả lời câu hỏi, nhưng việc cung cấp thêm ngữ cảnh liên quan đến lý do và / hoặc cách mã này trả lời câu hỏi sẽ cải thiện giá trị lâu dài của nó.
Benjamin W.

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

Bước 1 :

Thêm cái này vào tệp htaccess

<IfModule mod_rewrite.c> 
RewriteEngine On 
#RewriteBase / 

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

Bước 2 :

Xóa index.php trong cấu hình codeigniter

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

Bước 3 :

Cho phép ghi đè htaccess trong Cấu hình Apache (Lệnh)

sudo nano /etc/apache2/apache2.conf và chỉnh sửa tệp và thay đổi thành

AllowOverride All

cho thư mục www

Bước 4 :

Đã bật ghi lại mod apache (Lệnh)

sudo a2enmod viết lại

Bước 5:

Khởi động lại Apache (Lệnh)

sudo /etc/init.d/apache2 restart
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.