Hướng dẫn how to remove php extension from url in php - cách xóa phần mở rộng php khỏi url trong php

Gần đây tôi muốn xóa các phần mở rộng khỏi trang web của mình, để làm cho URL trở nên thân thiện với người dùng và tìm kiếm. Tôi tình cờ thấy các hướng dẫn về cách xóa tiện ích mở rộng

RewriteRule ^([^\.]+)$ $1.html [NC,L]
4 khỏi trang PHP. Còn
RewriteRule ^([^\.]+)$ $1.html [NC,L]
5 thì sao? Tôi cũng muốn loại bỏ những thứ đó! Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách thực hiện một cách dễ dàng, bằng cách chỉnh sửa tệp
RewriteRule ^([^\.]+)$ $1.html [NC,L]
6.

Tệp .htaccess là gì

Tệp

RewriteRule ^([^\.]+)$ $1.html [NC,L]
6 là một tệp ASCII đơn giản mà bạn tạo với trình chỉnh sửa văn bản như Notepad hoặc Textedit. Tệp cho phép máy chủ biết cấu hình nào thay đổi để thực hiện trên cơ sở mỗi hướng.

Xin lưu ý rằng

RewriteRule ^([^\.]+)$ $1.html [NC,L]
6 là tên đầy đủ của tệp. Đó là
RewriteRule ^([^\.]+)$ $1.html [NC,L]
9, nó chỉ đơn giản là
RewriteRule ^([^\.]+)$ $1.html [NC,L]
6.

RewriteRule ^([^\.]+)$ $1.html [NC,L]
6 Các tệp ảnh hưởng đến thư mục mà chúng được đặt vào và tất cả trẻ em (các hướng phụ). Ví dụ: nếu có một tệp
RewriteRule ^([^\.]+)$ $1.html [NC,L]
6 nằm trong thư mục gốc của bạn là
wallpaper
3, nó sẽ ảnh hưởng đến
wallpaper
4,
wallpaper
5, v.v.

Điều quan trọng cần nhớ là điều này có thể được bỏ qua. Nếu bạn không muốn các lệnh

RewriteRule ^([^\.]+)$ $1.html [NC,L]
6 nhất định ảnh hưởng đến một thư mục cụ thể, hãy đặt một tệp
RewriteRule ^([^\.]+)$ $1.html [NC,L]
6 mới trong thư mục mà bạn không muốn bị ảnh hưởng với các thay đổi và xóa (các) lệnh cụ thể khỏi tệp mới.

Đặc trưng

Với một tệp

RewriteRule ^([^\.]+)$ $1.html [NC,L]
6, bạn có thể:

  • Chuyển hướng người dùng đến trang khác nhau
  • Mật khẩu bảo vệ một thư mục cụ thể
  • Chặn người dùng theo IP
  • Ngăn chặn liên kết nóng của hình ảnh của bạn
  • Viết lại URL
  • Chỉ định các tài liệu lỗi của riêng bạn

Trong hướng dẫn này, chúng tôi sẽ chỉ tập trung vào việc viết lại các URL.rewriting URLs.

Loại bỏ các phần mở rộng

Để xóa tiện ích mở rộng

RewriteRule ^([^\.]+)$ $1.html [NC,L]
4 khỏi tệp PHP, ví dụ
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ $1.php
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]
0 đến
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ $1.php
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]
1, bạn phải thêm mã sau trong tệp
RewriteRule ^([^\.]+)$ $1.html [NC,L]
6:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

Nếu bạn muốn xóa tiện ích mở rộng

RewriteRule ^([^\.]+)$ $1.html [NC,L]
5 khỏi tệp HTML, ví dụ
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ $1.php
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]
4 sang
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ $1.php
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]
1, bạn chỉ cần thay đổi dòng cuối cùng từ mã trên, để khớp tên tệp:

RewriteRule ^([^\.]+)$ $1.html [NC,L]

Đó là nó! Bây giờ bạn có thể liên kết các trang bên trong tài liệu HTML mà không cần thêm phần mở rộng của trang. Ví dụ:

wallpaper

Thêm một dấu gạch chéo ở cuối

Tôi đã nhận được nhiều yêu cầu hỏi làm thế nào để thêm một dấu gạch chéo ở cuối, ví dụ:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ $1.php
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]
6

Bỏ qua đoạn trích đầu tiên và chèn mã bên dưới. Bốn dòng đầu tiên liên quan đến việc loại bỏ phần mở rộng và sau đây, với việc bổ sung dấu gạch chéo và chuyển hướng.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ $1.php
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]

Liên kết đến tệp HTML hoặc PHP giống như cách hiển thị ở trên. Don Tiết quên thay đổi mã nếu bạn muốn áp dụng cho tệp HTML thay vì PHP.

Một số người hỏi làm thế nào bạn có thể xóa tiện ích mở rộng khỏi cả hai tệp HTML và PHP. Tôi không có một giải pháp cho điều đó. Nhưng, bạn chỉ có thể thay đổi phần mở rộng của tệp HTML của mình từ

RewriteRule ^([^\.]+)$ $1.html [NC,L]
5 hoặc
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ $1.php
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]
8 thành
RewriteRule ^([^\.]+)$ $1.html [NC,L]
4 và thêm mã để xóa tiện ích mở rộng
RewriteRule ^([^\.]+)$ $1.html [NC,L]
4.

Sự kết luận

Đối với những người không có kinh nghiệm với các tệp

RewriteRule ^([^\.]+)$ $1.html [NC,L]
6, có một công cụ trực tuyến để tạo chúng. Nó rất hữu ích cho người dùng mới bắt đầu và dễ sử dụng.

Cập nhật

Người dùng Godaddy chú ý: Để loại bỏ các phần mở rộng bạn cần để kích hoạt

Options +MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
2 trước đó. Mã sẽ trông như thế này:

Options +MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

Nếu bạn lo lắng rằng các công cụ tìm kiếm có thể lập chỉ mục các trang này dưới dạng nội dung trùng lặp, hãy thêm thẻ meta

Options +MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
3 trong
Options +MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
4 của tệp HTML của bạn:


Apache mod_rewrite

Những gì bạn đang tìm kiếm là mod_rewrite,

Mô tả: Cung cấp một công cụ viết lại dựa trên quy tắc để viết lại các URL được yêu cầu một cách nhanh chóng.

Nói chung,

Options +MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
5 hoạt động bằng cách khớp tài liệu được yêu cầu với các biểu thức thông thường được chỉ định, sau đó thực hiện viết lại URL nội bộ (trong quy trình Apache) hoặc bên ngoài (trong trình duyệt của máy khách). Các bản viết lại này có thể đơn giản như dịch nội bộ
Options +MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
6 thành một yêu cầu cho
Options +MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
7.

Các tài liệu Apache bao gồm hướng dẫn

Options +MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
5 và tôi nghĩ rằng một số điều bạn muốn làm được đề cập trong đó. Hướng dẫn chi tiết MOD_REWRITE.

Buộc tên miền phụ Options +MultiViews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^\.]+)$ $1.php [NC,L] 9

Tôi muốn nó buộc "www" trước mỗi url, vì vậy nó không phải là


0 mà

1

Hướng dẫn viết lại bao gồm các hướng dẫn cho điều này theo ví dụ tên máy chủ chính tắc.

Loại bỏ dấu gạch chéo (Phần 1)

Tôi muốn xóa tất cả các dấu gạch chéo từ các trang

Tôi không chắc tại sao bạn muốn làm điều này vì hướng dẫn viết lại bao gồm một ví dụ cho điều ngược lại, tức là, luôn luôn bao gồm một dấu gạch chéo. Các tài liệu cho thấy việc loại bỏ dấu gạch chéo có tiềm năng lớn để gây ra các vấn đề:

Vấn đề chém kéo dài

Description:

Mọi quản trị trang web đều có thể hát một bài hát về vấn đề chém vào các thư mục tham chiếu URL. Nếu chúng bị thiếu, máy chủ sẽ bỏ lỗi, bởi vì nếu bạn nói


2 thay vì

3 thì máy chủ sẽ tìm kiếm một tệp có tên FOO. Và bởi vì tập tin này là một thư mục mà nó phàn nàn. Trên thực tế, nó cố gắng tự sửa nó trong hầu hết các trường hợp, nhưng đôi khi cơ chế này cần phải được mô phỏng bởi bạn. Chẳng hạn, sau khi bạn đã thực hiện rất nhiều việc viết lại URL phức tạp cho các tập lệnh CGI, v.v.

Có lẽ bạn có thể mở rộng lý do tại sao bạn muốn loại bỏ dấu vết dấu vết mọi lúc?

Hủy bỏ tiện ích mở rộng RewriteRule ^([^\.]+)$ $1.html [NC,L] 4

Tôi cần nó để loại bỏ .php

Điều gần nhất để làm điều này mà tôi có thể nghĩ là viết lại nội bộ mọi tài liệu yêu cầu với tiện ích mở rộng .php, tức là,


5 thay vào đó được xử lý như một yêu cầu cho

6. Lưu ý rằng việc tiến hành theo cách này sẽ yêu cầu mỗi trang một số thực sự tồn tại dưới dạng somePage.php trên hệ thống tập tin.

Với sự kết hợp đúng đắn của các biểu thức chính quy, điều này có thể ở một mức độ nào đó. Tuy nhiên, tôi có thể thấy trước một số vấn đề có thể xảy ra với các trang chỉ mục không được yêu cầu chính xác và không khớp chính xác các thư mục.

Ví dụ: điều này sẽ viết lại chính xác


7 dưới dạng yêu cầu cho

8:

RewriteEngine  on
RewriteRule ^(.*)$ $1.php

Nhưng sẽ làm cho


9 không tải được vì không có
RewriteEngine  on
RewriteRule ^(.*)$ $1.php
0

Tôi sẽ đoán rằng nếu bạn sẽ xóa tất cả các dấu gạch chéo, thì việc chọn yêu cầu chỉ mục thư mục khỏi yêu cầu tên tệp trong thư mục cha sẽ trở nên gần như không thể. Làm thế nào để bạn xác định một yêu cầu cho thư mục 'foobar':

example.com/foobar

từ một yêu cầu cho một tập tin gọi là foobar (thực sự là foobar.php)

example.com/foobar

Có thể nếu bạn sử dụng Chỉ thị

RewriteEngine  on
RewriteRule ^(.*)$ $1.php
1. Nhưng nếu bạn làm điều đó thì vấn đề này sẽ phức tạp hơn khi bạn sẽ yêu cầu các chỉ thị
RewriteEngine  on
RewriteRule ^(.*)$ $1.php
2 để thực hiện kiểm tra mức hệ thống tập tin nếu yêu cầu ánh xạ vào thư mục hoặc tệp.

Điều đó nói rằng, nếu bạn loại bỏ yêu cầu của mình trong việc loại bỏ tất cả các dấu gạch chéo và thay vào đó là dấu vết tăng cường, việc cắt giảm vấn đề "Phần mở rộng .php" trở nên hợp lý hơn một chút.

# Turn on the rewrite engine
RewriteEngine  on
# If the request doesn't end in .php (Case insensitive) continue processing rules
RewriteCond %{REQUEST_URI} !\.php$ [NC]
# If the request doesn't end in a slash continue processing the rules
RewriteCond %{REQUEST_URI} [^/]$
# Rewrite the request with a .php extension. L means this is the 'Last' rule
RewriteRule ^(.*)$ $1.php [L]

Điều này vẫn không hoàn hảo - mọi yêu cầu cho một tệp vẫn có .php được thêm vào yêu cầu trong nội bộ. Yêu cầu 'Hi.txt' sẽ đặt cái này vào nhật ký lỗi của bạn:

RewriteRule ^([^\.]+)$ $1.html [NC,L]
0

Nhưng có một tùy chọn khác, đặt các chỉ thị

RewriteEngine  on
RewriteRule ^(.*)$ $1.php
3 và
RewriteEngine  on
RewriteRule ^(.*)$ $1.php
4 như thế này:

RewriteRule ^([^\.]+)$ $1.html [NC,L]
1

Cập nhật 2013-11-14-Đã sửa đoạn trích trên để kết hợp quan sát của Nicorellius

Bây giờ các yêu cầu cho hi.txt (và bất cứ điều gì khác) đều thành công, các yêu cầu cho


7 sẽ trả về phiên bản đã xử lý của Test.php và các tệp index.php sẽ hoạt động trở lại.

Tôi phải cung cấp tín dụng khi tín dụng đến hạn cho giải pháp này vì tôi đã tìm thấy nó blog Michael J. Radwins bằng cách tìm kiếm Google cho PHP không mở rộng Apache.

Loại bỏ dấu gạch chéo

Một số tìm kiếm

RewriteEngine  on
RewriteRule ^(.*)$ $1.php
6 đã đưa tôi đến một số trang tối ưu hóa công cụ tìm kiếm. Rõ ràng một số hệ thống quản lý nội dung (drupal trong trường hợp này) sẽ cung cấp nội dung có sẵn và không có dấu gạch chéo trong URL, trong thế giới SEO sẽ khiến trang web của bạn phải chịu hình phạt nội dung trùng lặp. Nguồn

Giải pháp có vẻ khá tầm thường, sử dụng

Options +MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
5 Chúng tôi viết lại với điều kiện tài nguyên được yêu cầu kết thúc trong
RewriteEngine  on
RewriteRule ^(.*)$ $1.php
8 và viết lại URL bằng cách gửi lại tiêu đề
RewriteEngine  on
RewriteRule ^(.*)$ $1.php
9 HTTP.

Đây là ví dụ của anh ấy giả định tên miền của bạn là blamcast.net và cho phép yêu cầu tùy chọn được đặt trước với

example.com/foobar
0.

RewriteRule ^([^\.]+)$ $1.html [NC,L]
2

Bây giờ chúng tôi đang nhận được một nơi nào đó. Hãy đặt tất cả lại với nhau và xem nó trông như thế nào.

Bắt buộc example.com/foobar 0, không RewriteRule ^([^\.]+)$ $1.html [NC,L] 4 và không có dấu gạch chéo nào

Điều này giả định tên miền là

example.com/foobar
3 và nó đang chạy trên cổng tiêu chuẩn 80.

RewriteRule ^([^\.]+)$ $1.html [NC,L]
3

Cờ 'R' được mô tả trong phần Chỉ thị

example.com/foobar
4. Đoạn trích:

example.com/foobar
5 (Lực lượng chuyển hướng) thay thế tiền tố bằng
example.com/foobar
6 (làm cho URL mới là URI) để buộc chuyển hướng bên ngoài. Nếu không có mã nào được đưa ra, phản hồi HTTP là 302 (tạm thời di chuyển) sẽ được trả về.

Lưu ý cuối cùng

Tôi đã không thể loại bỏ việc cắt giảm để làm việc thành công. Sự chuyển hướng cuối cùng đã cho tôi các vòng lặp chuyển hướng vô hạn. Sau khi đọc giải pháp ban đầu gần hơn, tôi có ấn tượng rằng ví dụ trên hoạt động cho họ vì cách cài đặt Drupal của họ được cấu hình. Anh ấy đề cập cụ thể:

Trên một trang web Drupal bình thường, với các URL sạch được bật, hai địa chỉ này về cơ bản có thể hoán đổi cho nhau

Liên quan đến URL kết thúc có và không có dấu gạch chéo. Hơn nữa,

Drupal sử dụng một tệp có tên

RewriteRule ^([^\.]+)$ $1.html [NC,L]
6 để nói với máy chủ web của bạn cách xử lý URL. Đây là cùng một tệp cho phép phép thuật URL sạch của Drupal. Bằng cách thêm một lệnh chuyển hướng đơn giản vào đầu tệp
RewriteRule ^([^\.]+)$ $1.html [NC,L]
6 của bạn, bạn có thể buộc máy chủ tự động xóa bất kỳ dấu gạch chéo nào.

Làm cách nào để loại bỏ một .php khỏi url trong cpanel?

Các bước để xóa phần mở rộng tệp là:..
Đăng nhập vào tài khoản cPanel của bạn ..
Chuyển đến Trình quản lý tệp - trong phần Tệp ..
Trong trình quản lý tệp, hãy chuyển đến nút Cài đặt ở góc trên cùng bên phải ..
Trên cửa sổ Tùy chọn sẽ xuất hiện, hãy kiểm tra tùy chọn HIDDEN FILE (dotfiles).....
Bây giờ điều hướng đến ..

Tệp .htaccess trong PHP là gì?

Các .Tệp HTAccess (Access SuperText Access) là tệp cấu hình máy chủ phân phối Apache.Bạn có thể dùng .Tệp HTAccess để đặt cấu hình máy chủ cho một thư mục cụ thể.Thư mục này có thể là thư mục gốc của trang web của bạn hoặc một thư mục con khác trong đó.an Apache distributed server configuration file. You can use the . htaccess file to set server configurations for a specific directory. This directory can be the root directory of your website or another subdirectory where the .

Phần mở rộng trong PHP là gì?

Tiện ích mở rộng tệp PHP đề cập đến tên của một tệp có tập lệnh PHP hoặc mã nguồn có tiện ích mở rộng ".php" ở cuối của nó.Nó tương tự như một tệp từ với a.Phần mở rộng tập tin tài liệu.the name of a file with a PHP script or source code that has a ". PHP" extension at the end of it. It's similar to a Word file with a . doc file extension.