Để loại bỏ các chỉ mục trên mạng.
Nếu bạn đang chạy Apache, bạn có thể làm điều đó bằng cách tạo một chuyển hướng trong tệp .htaccess trang web của bạn. Nếu bạn không có một tệp, hãy tạo một tệp mới có tên là .htaccess, trong trang web của bạn.
Lưu cái này bên trong tệp .htaccess của bạn:
RewriteEngine On
# Send would-be 404 requests to Craft
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/[favicon\.ico|apple-touch-icon.*\.png]$ [NC]
RewriteRule [.+] index.php?p=$1 [QSA,L]
Điều đó viết lại quy tắc về cơ bản nói, nếu một yêu cầu được đưa ra trong bản đồ đó không phải là một thư mục hoặc tệp hiện có, hãy chuyển nó sang index.php thay thế.
Với tệp đó, hãy thử truy cập một trang trên trang web của bạn [bên cạnh trang chủ của bạn], mà không cần chỉ mục. Nếu nó hoạt động, tuyệt vời! Nếu không, bạn nên kiểm tra với máy chủ của mình để xem lý do tại sao tệp .htaccess không hoạt động.
Điều đó thật tuyệt, nhưng các URL của tôi vẫn đang xuất hiện với Index index.php, # #
Bước cuối cùng là nói với Craft rằng trang web của bạn được thiết lập để xử lý các URL mà không cần chỉ số. .
Bạn có thể nói với Craft không bao gồm các chỉ mục của nhóm.
'omitScriptNameInUrls' => true,
Với điều đó, Craft sẽ nhận lời của bạn và ngừng thực hiện kiểm tra hàng ngày.
Nhưng nghiêm túc mà nói, các URL của tôi vẫn có chỉ số.
Nếu bạn trên Apache, tệp httpd.conf
của bạn có thể không được đặt cho trang web của bạn, việc vô hiệu hóa hiệu quả tất cả các thay đổi tệp .htaccess
. Thay đổi nó thành AllowOverride All
, khởi động lại Apache và cuối cùng bạn sẽ được đặt. Ngoài ra, hãy đảm bảo MOD_REWRITE được bật.
Theo mặc định, các nền tảng PHP như WordPress và Codeigniter expend index.php ở cuối URL trang web, không thực sự cần thiết. Dưới đây là các bước để xóa index.php khỏi url bằng cách sử dụng .htaccess trong máy chủ web Apache. Bạn có thể sử dụng các bước này để xóa index.php khỏi WordPress, Codeigniter và các trang web PHP khác.
Về cơ bản, chúng tôi sẽ chuyển hướng Index.php sang URL mà không có nó. Vì vậy, chúng tôi sẽ cần mô -đun Apache mod_rewrite.
Trước khi tiếp tục tiếp tục, vui lòng đảm bảo rằng bạn đã kích hoạt mod_rewrite trong Apache Web Server. Dưới đây là các bước để kích hoạt mod_rewrite trong Apache. Vào cuối của nó, bạn sẽ tạo một tệp .htaccess cho trang web của bạn.
1. Mở tệp .htaccess
Mở thiết bị đầu cuối và chạy các lệnh sau để mở tệp .htaccess. Chúng tôi đã sử dụng đường dẫn tệp mặc định của tệp .htaccess. Bạn có thể thay đổi nó theo yêu cầu của bạn.
$ sudo vi /var/www/html/.htaccess
2. Xóa index.php khỏi url
Thêm các dòng sau trong tệp .htaccess.
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^[.*]$ index.php/$1 [L]
Chúng ta hãy nhìn vào từng dòng ở trên. Dòng đầu tiên cho phép mod_rewrite nếu nó chưa được bật.
Dòng thứ hai phù hợp với các URL không phải là tệp. Dòng thứ ba phù hợp với các URL không phải là thư mục. Vì vậy, chúng tôi đang tìm cách phù hợp với các URL không phải là tệp cũng không phải thư mục.
Dòng cuối cùng có nghĩa là nếu hai câu lệnh viết lại trước khi nó được khớp với URL, thì nó sẽ được chuyển hướng đến URL mà không cần index.php trong đó.
3. Khởi động lại máy chủ web Apache
Khởi động lại máy chủ Apache để áp dụng các thay đổi
$ sudo systemctl restart httpd
Bây giờ nếu bạn mở trình duyệt và truy cập //your_domain_or_ip/index.php, bạn sẽ được chuyển hướng đến // your_domain_or_ip. Thay thế your_domain_or_ip bằng tên miền hoặc địa chỉ IP của bạn. Tương tự, nếu bạn truy cập URL như //your_domain_or_ip/index.php/Folder1/Folder2 Bạn sẽ được chuyển hướng đến // your_domain_or_ip/firder1/firder2
Bài viết liên quan:
- về tác giả
Câu trả lời ban đầu thực sự là chính xác, nhưng thiếu giải thích. Tôi muốn thêm một số giải thích và sửa đổi.
Tôi khuyên bạn nên đọc phần giới thiệu ngắn này //httpd.apache.org/docs/2.4/rewrite/intro.html [15 phút] và tham khảo 2 trang này trong khi đọc.
//httpd.apache.org/docs/2.4/mod/mod_rewrite.html //httpd.apache.org/docs/2.4/rewrite/flags.html
Đây là quy tắc cơ bản để ẩn index.php
khỏi URL. Đặt cái này vào tệp root .htaccess
của bạn.
'omitScriptNameInUrls' => true,
1 phải được bật bằng PHP và điều này sẽ hoạt động cho phiên bản PHP cao hơn 5.2.6.RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule [.*] /index.php/$1 [L]
Hãy nghĩ
'omitScriptNameInUrls' => true,
2 là con đường sau máy chủ.Ví dụ.
'omitScriptNameInUrls' => true,
3, 'omitScriptNameInUrls' => true,
2 là 'omitScriptNameInUrls' => true,
5Vì vậy, 3 dòng cuối cùng có nghĩa là, nếu đó không phải là một tệp thông thường
'omitScriptNameInUrls' => true,
6 chứ không phải thư mục 'omitScriptNameInUrls' => true,
7, thì hãy thực hiện 'omitScriptNameInUrls' => true,
8.Đối với các định dạng viết lại:
Vì vậy,
'omitScriptNameInUrls' => true,
9 có nghĩa là, nếu 2 $ sudo vi /var/www/html/.htaccess0 được thỏa mãn, nó
$ sudo vi /var/www/html/.htaccess1 sẽ khớp với mọi thứ sau tên máy chủ.
$ sudo vi /var/www/html/.htaccess2 khớp với bất kỳ ký tự đơn nào,
$ sudo vi /var/www/html/.htaccess3 khớp với bất kỳ ký tự nào và
$ sudo vi /var/www/html/.htaccess1 làm cho điều này trở thành một biến có thể được tham chiếu bằng
$ sudo vi /var/www/html/.htaccess5, sau đó thay thế bằng
$ sudo vi /var/www/html/.htaccess6. Hiệu ứng cuối cùng là thêm
index.php
trước đó vào toàn bộ đường dẫn URL.characters and $ sudo vi /var/www/html/.htaccess1 makes this a variables can be references with
$ sudo vi /var/www/html/.htaccess5, then replace with
$ sudo vi /var/www/html/.htaccess6. The final effect is to add a preceding
index.php
to the whole URL path.Ví dụ. Đối với
$ sudo vi /var/www/html/.htaccess8, nó sẽ sản xuất,
$ sudo vi /var/www/html/.htaccess9 trong nội bộ.internally.
Một vấn đề quan trọng khác là điều này thực sự giải quyết câu hỏi. Trong nội bộ, [tôi đoán] nó luôn cần
$ sudo vi /var/www/html/.htaccess9, nhưng với việc viết lại, bạn có thể truy cập trang web mà không cần
index.php
, Apache nói thêm điều đó cho bạn trong nội bộ.Internally, [I
guess] it always need $ sudo vi /var/www/html/.htaccess9, but with rewriting, you could visit the site without
index.php
, apache adds that for you internally.BTW, tạo thêm một tệp .htaccess
không được Apache Doc khuyến nghị lắm.
Viết lại thường được cấu hình trong cài đặt cấu hình máy chủ chính [bên ngoài bất kỳ phần
3 nào] hoặc bên trong các containerRewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^[.*]$ index.php/$1 [L]
4. Đây là cách dễ nhất để viết lại và được khuyến nghịRewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^[.*]$ index.php/$1 [L]