Hướng dẫn apache2 hide html extension - apache2 ẩn phần mở rộng html

49

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi có một số lượng nhỏ các trang web tĩnh nơi tôi chỉ muốn ẩn tiện ích mở rộng .html:

  • URL
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-d          # is not directory
    RewriteCond %{REQUEST_FILENAME}\.html -f     # is an existing html file
    RewriteRule ^(.*)$ $1.html                   # rewrite index to index.html
    
    0 tìm nạp tệp tĩnh
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-d          # is not directory
    RewriteCond %{REQUEST_FILENAME}\.html -f     # is an existing html file
    RewriteRule ^(.*)$ $1.html                   # rewrite index to index.html
    
    1
  • Trình duyệt vẫn hiển thị URL
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-d          # is not directory
    RewriteCond %{REQUEST_FILENAME}\.html -f     # is an existing html file
    RewriteRule ^(.*)$ $1.html                   # rewrite index to index.html
    
    0

Sau đó, khách hàng có thể gửi dấu trang theo kiểu

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d          # is not directory
RewriteCond %{REQUEST_FILENAME}\.html -f     # is an existing html file
RewriteRule ^(.*)$ $1.html                   # rewrite index to index.html
3 thay vì
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d          # is not directory
RewriteCond %{REQUEST_FILENAME}\.html -f     # is an existing html file
RewriteRule ^(.*)$ $1.html                   # rewrite index to index.html
4.

Nghe có vẻ rất đơn giản và tôi đã sử dụng

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d          # is not directory
RewriteCond %{REQUEST_FILENAME}\.html -f     # is an existing html file
RewriteRule ^(.*)$ $1.html                   # rewrite index to index.html
5 một cách hạnh phúc trước đây (nói với WordPress hoặc để chuyển hướng), nhưng điều này gây khó khăn hơn nhiều để bẻ khóa mà tôi nghĩ. Có lẽ tôi đang thiếu một cái gì đó thực sự rõ ràng, nhưng tôi không thể tìm thấy một giải pháp ở bất cứ đâu và tôi đã ở đó cả ngày!

Chúng tôi chạy máy chủ của riêng mình, vì vậy điều này có thể đi bất cứ nơi nào là nơi tốt nhất.

Phụ lục

Các giải pháp được kiểm tra dưới đây hoạt động tốt. Sau đó, sau khi chạy trang web một lúc, tôi nhận thấy hai vấn đề:

  1. Tất cả các trang bắt đầu xuất hiện không có kiểu. Tôi đã tải lại, xóa bộ đệm, v.v., nhưng vẫn không có kiểu. Tôi đã gặp rắc rối này trước đây và không thể xác định vị trí nguồn.

  2. Có một thư mục và tệp HTML có tên là 'Thư viện', do đó, liên kết /bộ sưu tập hiển thị danh sách thư mục thay vì tệp HTML. Tôi sẽ có thể sắp xếp cái đó, nhưng những lời khuyên tiếp theo :-)

Hướng dẫn apache2 hide html extension - apache2 ẩn phần mở rộng html

hỏi ngày 2 tháng 1 năm 2010 lúc 17:29Jan 2, 2010 at 17:29

Dave Everittdave EverittDave Everitt

16.4K6 Huy hiệu vàng65 Huy hiệu bạc94 Huy hiệu Đồng6 gold badges65 silver badges94 bronze badges

Hãy thử quy tắc này:

RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule !.*\.html$ %{REQUEST_FILENAME}.html [L]

Điều này sẽ viết lại tất cả các yêu cầu có thể được ánh xạ vào một tệp hiện có khi thêm .html.

Đã trả lời ngày 2 tháng 1 năm 2010 lúc 17:31Jan 2, 2010 at 17:31

13

Các câu trả lời trước đó không kiểm tra xem đường dẫn được yêu cầu có phải là một thư mục không.

Dưới đây là điều kiện viết lại đầy đủ không viết lại, nếu đường dẫn được yêu cầu là một thư mục (như đã nêu trong câu hỏi ban đầu):

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d          # is not directory
RewriteCond %{REQUEST_FILENAME}\.html -f     # is an existing html file
RewriteRule ^(.*)$ $1.html                   # rewrite index to index.html

Để thân thiện với SEO và tránh nội dung kép, chuyển hướng URL .html:

# Redirects example.com/file.html to example.com/file
RewriteCond %{REQUEST_FILENAME} !-d          # is not directory
RewriteCond %{REQUEST_FILENAME}\.html -f     # is an existing html file
RewriteCond %{REQUEST_URI} ^(.+)\.html$      # request URI ends with .html
RewriteRule (.*)\.html$ /$1 [R=301,L]        # redirect from index.html to index

Nếu bạn cần điều tương tự cho các tập lệnh hãy xem ở đây: Làm thế nào tôi có thể sử dụng .htaccess để ẩn các phần mở rộng URL .php?

Hướng dẫn apache2 hide html extension - apache2 ẩn phần mở rộng html

Đã trả lời ngày 27 tháng 5 năm 2013 lúc 13:09May 27, 2013 at 13:09

Hướng dẫn apache2 hide html extension - apache2 ẩn phần mở rộng html

Stefan Profanterstefan ProfanterStefan Profanter

6.2685 Huy hiệu vàng39 Huy hiệu bạc68 Huy hiệu Đồng5 gold badges39 silver badges68 bronze badges

7

Giải pháp được chấp nhận không hoạt động khi trang web được cấu hình với gốc máy chủ / tài liệu ảo.

Có giải pháp tôi đã sử dụng:

RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}.html -f
RewriteRule !.*\.html$ %{REQUEST_FILENAME}.html [L]

Hướng dẫn apache2 hide html extension - apache2 ẩn phần mở rộng html

Đã trả lời ngày 16 tháng 5 năm 2014 lúc 4:22May 16, 2014 at 4:22

Hướng dẫn apache2 hide html extension - apache2 ẩn phần mở rộng html

Gael Lafondgael LafondGael Lafond

5196 Huy hiệu bạc5 Huy hiệu Đồng6 silver badges5 bronze badges

0

Wow, tôi hiếm khi thấy một vấn đề như vậy tồn tại rất nhiều "giải pháp" trên web, nơi mọi người chỉ cần đưa ra "làm việc cho họ" nhưng ít người mất thời gian để đọc tài liệu để tìm ra những gì nó làm. Ví dụ, nhiều giải pháp được đưa ra ở đây không hoạt động cho máy chủ ảo.

Sau nhiều lần tham khảo và đọc chéo, tôi muốn đóng góp giải pháp của riêng mình "làm việc cho tôi". Hy vọng rằng nó cũng hoạt động cho bạn. Tôi đã không tạo nó từ đầu; Tôi đã được truyền cảm hứng bởi tất cả các đóng góp khác (mặc dù hầu hết trong số họ không "làm việc cho tôi" mà không cần sửa đổi).

RewriteEngine on

#if foo requested, return foo.html contents
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}\.html -f
RewriteRule ^(.*)$ $1.html [L]

#redirect foo.html to foo
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
RewriteRule ^(.+)\.html$ $1 [R,L]

Cờ

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d          # is not directory
RewriteCond %{REQUEST_FILENAME}\.html -f     # is an existing html file
RewriteRule ^(.*)$ $1.html                   # rewrite index to index.html
8 theo mặc định thực hiện chuyển hướng tạm thời (302); Nếu bạn muốn chuyển hướng vĩnh viễn, hãy sử dụng
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d          # is not directory
RewriteCond %{REQUEST_FILENAME}\.html -f     # is an existing html file
RewriteRule ^(.*)$ $1.html                   # rewrite index to index.html
9 thay cho
# Redirects example.com/file.html to example.com/file
RewriteCond %{REQUEST_FILENAME} !-d          # is not directory
RewriteCond %{REQUEST_FILENAME}\.html -f     # is an existing html file
RewriteCond %{REQUEST_URI} ^(.+)\.html$      # request URI ends with .html
RewriteRule (.*)\.html$ /$1 [R=301,L]        # redirect from index.html to index
0.

Đã trả lời ngày 26 tháng 6 năm 2016 lúc 23:11Jun 26, 2016 at 23:11

Garret Wilsongarret WilsonGarret Wilson

16.4K25 Huy hiệu vàng129 Huy hiệu bạc245 Huy hiệu Đồng25 gold badges129 silver badges245 bronze badges

3

Để xóa tiện ích mở rộng .html khỏi các yêu cầu

# Redirects example.com/file.html to example.com/file
RewriteCond %{REQUEST_FILENAME} !-d          # is not directory
RewriteCond %{REQUEST_FILENAME}\.html -f     # is an existing html file
RewriteCond %{REQUEST_URI} ^(.+)\.html$      # request URI ends with .html
RewriteRule (.*)\.html$ /$1 [R=301,L]        # redirect from index.html to index
2, bạn có thể sử dụng tập lệnh sau trong
# Redirects example.com/file.html to example.com/file
RewriteCond %{REQUEST_FILENAME} !-d          # is not directory
RewriteCond %{REQUEST_FILENAME}\.html -f     # is an existing html file
RewriteCond %{REQUEST_URI} ^(.+)\.html$      # request URI ends with .html
RewriteRule (.*)\.html$ /$1 [R=301,L]        # redirect from index.html to index
3:

RewriteEngine On
RewriteBase /
#1) externally redirect "/file.html" to "/file"
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.html [NC]
RewriteRule ^ %1 [R=301,L]
#2) rewrite  "/file" back to "/file.html"
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.*?)/?$ $1.html [NC,L]

Đã trả lời ngày 24 tháng 6 năm 2016 lúc 3:52Jun 24, 2016 at 3:52

Hướng dẫn apache2 hide html extension - apache2 ẩn phần mở rộng html

Amit Vermaamit VermaAmit Verma

39,9K19 Huy hiệu vàng87 Huy hiệu bạc 109 Huy hiệu đồng19 gold badges87 silver badges109 bronze badges

3

  • URL /foo tìm nạp tệp tĩnh /foo.html
  • Trình duyệt vẫn hiển thị URL /FOO

Apache có thể làm điều này mà không cần

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d          # is not directory
RewriteCond %{REQUEST_FILENAME}\.html -f     # is an existing html file
RewriteRule ^(.*)$ $1.html                   # rewrite index to index.html
5, xem tài liệu:

Nhiều lượt xem

Hiệu ứng của đa lượt xem như sau: nếu máy chủ nhận được yêu cầu/một số/dir/foo, nếu/some/drid có kích hoạt đa lượt xem và/một số/dir/foo không tồn tại, thì máy chủ đọc thư mục đang tìm kiếm Các tệp có tên foo.*, và thực hiện một cách hiệu quả một bản đồ loại đặt tên cho tất cả các tệp đó, gán cho chúng cùng các loại phương tiện và mã hóa nội dung mà nó sẽ có nếu khách hàng đã yêu cầu một trong số chúng theo tên. Sau đó, nó chọn phù hợp nhất với các yêu cầu của khách hàng.

Nguồn: http://httpd.apache.org/docs/civerse/content-negotiation.html

Hướng dẫn apache2 hide html extension - apache2 ẩn phần mở rộng html

Sɐunıɔ Qɐp

3.01315 Huy hiệu vàng34 Huy hiệu bạc38 Huy hiệu đồng15 gold badges34 silver badges38 bronze badges

Đã trả lời ngày 6 tháng 8 năm 2020 lúc 7:46Aug 6, 2020 at 7:46

Hướng dẫn apache2 hide html extension - apache2 ẩn phần mở rộng html

Dưới đây là một ví dụ cho phép chúng tôi lưu trữ tệp trên đĩa là:

foo.html.php

Nhưng trong trình duyệt, hãy gọi nó là

foo.html

Để thực hiện công việc này cho bạn, tôi nghĩ rằng bạn sẽ chỉ cần sửa đổi nó một chút để phù hợp với các yêu cầu hiện tại của bạn và kiểm tra một tệp thực tế tại chỗ với tiện ích mở rộng .html.

 # These are so we do not need the .php extension
 RewriteCond %{REQUEST_FILENAME} (\.xul|\.html|\.xhtml|\.xml)$',
 RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}.php -f',
 RewriteRule ^(.*)$ $1.php',

Đã trả lời ngày 2 tháng 1 năm 2010 lúc 17:32Jan 2, 2010 at 17:32

Gahooagahooagahooa

126K12 Huy hiệu vàng92 Huy hiệu bạc99 Huy hiệu Đồng12 gold badges92 silver badges99 bronze badges