Làm cách nào để xóa .html
khỏi URL của một trang tĩnh?
Ngoài ra, tôi cần chuyển hướng bất kỳ url nào có url đến url .html
không có nó. (tức là www.example.com/page.html
để www.example.com/page
).
Làm cách nào để xóa .html
khỏi URL của một trang tĩnh?
Ngoài ra, tôi cần chuyển hướng bất kỳ url nào có url đến url .html
không có nó. (tức là www.example.com/page.html
để www.example.com/page
).
Câu trả lời:
Tôi nghĩ một số giải thích về câu trả lời của Jon sẽ mang tính xây dựng. Như sau:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
kiểm tra xem nếu tệp hoặc thư mục được chỉ định tương ứng không tồn tại, thì quy tắc ghi lại sẽ tiến hành:
RewriteRule ^(.*)\.html$ /$1 [L,R=301]
Nhưng điều đó có nghĩa gì? Nó sử dụng regex (biểu thức chính quy) . Đây là một vài thứ tôi đã làm trước đó ...
Tôi nghĩ điều đó chính xác.
LƯU Ý: Khi kiểm tra, bạn .htaccess
không sử dụng chuyển hướng 301. Sử dụng 302 cho đến khi kiểm tra xong, vì trình duyệt sẽ lưu vào bộ nhớ cache của 301. Xem https://stackoverflow.com/a/9204355/3217306
Cập nhật: Tôi hơi nhầm, .
khớp với tất cả các ký tự ngoại trừ dòng mới, vì vậy bao gồm cả khoảng trắng. Ngoài ra, đây là một bảng gian lận regex hữu ích
Nguồn:
http://community.sitepoint.com/t/what-does-this-mean-rewritecond-request-filename-fd/2034/2
https:// Instantmple.net/community/products/dv/204643270/using-htaccess-rewrite-rules
Để xóa phần mở rộng .html khỏi url của bạn, bạn có thể sử dụng mã sau trong root / htaccess:
RewriteEngine on
RewriteCond %{THE_REQUEST} /([^.]+)\.html [NC]
RewriteRule ^ /%1 [NC,L,R]
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^ %{REQUEST_URI}.html [NC,L]
LƯU Ý: Nếu bạn muốn xóa bất kỳ phần mở rộng nào khác, chẳng hạn như để xóa phần mở rộng .php, chỉ cần thay thế html ở mọi nơi bằng php trong đoạn mã trên.
Với .htaccess dưới apache, bạn có thể thực hiện chuyển hướng như sau:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html$ /$1 [L,R=301]
Đối với việc xóa .html khỏi url, chỉ cần liên kết đến trang không có .html
<a href="http://www.example.com/page">page</a>
!-f
Điều này sẽ làm việc cho bạn:
#example.com/page will display the contents of example.com/page.html
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+)$ $1.html [L,QSA]
#301 from example.com/page.html to example.com/page
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.html\ HTTP/
RewriteRule ^(.*)\.html$ /$1 [R=301,L]
Bạn sẽ cần phải đảm bảo rằng bạn có Options -MultiViews
cũng có.
Không có cách nào ở trên phù hợp với tôi trên máy chủ cPanel tiêu chuẩn.
Điều này đã hoạt động:
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]
Cảm ơn cho câu trả lời của bạn. Tôi đã giải quyết được vấn đề của mình. Giả sử tôi có các trang của mình trong http://www.yoursite.com/html , các quy tắc .htaccess sau sẽ được áp dụng.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /html/(.*).html\ HTTP/
RewriteRule .* http://localhost/html/%1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /html/(.*)\ HTTP/
RewriteRule .* %1.html [L]
</IfModule>
Tôi sử dụng .htacess này để xóa .html extantion khỏi trang web url của mình, vui lòng xác minh đây là mã chính xác:
RewriteEngine on
RewriteBase /
RewriteCond %{http://www.proofers.co.uk/new} !(\.[^./]+)$
RewriteCond %{REQUEST_fileNAME} !-d
RewriteCond %{REQUEST_fileNAME} !-f
RewriteRule (.*) /$1.html [L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^.]+)\.html\ HTTP
RewriteRule ^([^.]+)\.html$ http://www.proofers.co.uk/new/$1 [R=301,L]
RewriteBase /
chút. Thật không may, tôi không hiểu tại sao nó hoạt động, nhưng tôi đoán tôi sẽ sớm học được.
Đối với những người đang sử dụng lưu trữ Firebase, không có câu trả lời nào sẽ hoạt động trên trang này. Vì bạn không thể sử dụng .htaccess
trong lưu trữ Firebase. Bạn sẽ phải định cấu hình tệp firebase.json. Chỉ cần thêm dòng "cleanUrls": true
trong tệp của bạn và lưu nó. Đó là nó.
Sau khi thêm dòng firebase.json sẽ trông như thế này:
{
"hosting": {
"public": "public",
"cleanUrls": true,
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
]
}
}
Để xóa phần mở rộng .html khỏi URL của bạn, bạn có thể sử dụng mã sau trong root / htaccess:
#mode_rerwrite start here
RewriteEngine On
# does not apply to existing directores, meaning that if the folder exists on server then don't change anything and don't run the rule.
RewriteCond %{REQUEST_FILENAME} !-d
#Check for file in directory with .html extension
RewriteCond %{REQUEST_FILENAME}\.html !-f
#Here we actually show the page that has .html extension
RewriteRule ^(.*)$ $1.html [NC,L]
Cảm ơn
RewriteRule /(.+)(\.html)$ /$1 [R=301,L]
Hãy thử cái này :) không biết nếu nó hoạt động.