จะลบออก.html
จาก URL ของเพจคงได้อย่างไร?
นอกจากนี้ฉันต้องเปลี่ยนเส้นทาง URL ใด ๆ.html
ไปยังURL ที่ไม่มี (กล่าวคือwww.example.com/page.html
ถึงwww.example.com/page
).
จะลบออก.html
จาก URL ของเพจคงได้อย่างไร?
นอกจากนี้ฉันต้องเปลี่ยนเส้นทาง URL ใด ๆ.html
ไปยังURL ที่ไม่มี (กล่าวคือwww.example.com/page.html
ถึงwww.example.com/page
).
คำตอบ:
ฉันคิดว่าคำอธิบายบางอย่างเกี่ยวกับคำตอบของจอนน่าจะเป็นประโยชน์ ดังต่อไปนี้:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
ตรวจสอบว่าหากไม่มีไฟล์หรือไดเร็กทอรีที่ระบุตามลำดับแล้วกฎการเขียนซ้ำจะดำเนินการต่อ:
RewriteRule ^(.*)\.html$ /$1 [L,R=301]
แต่นั่นหมายความว่าอย่างไร? มันใช้regex (การแสดงออกปกติ) นี่คือสิ่งเล็กน้อยที่ฉันทำไว้ก่อนหน้านี้ ...
ฉันคิดว่าถูกต้อง
หมายเหตุ: เมื่อทำการทดสอบ.htaccess
อย่าใช้การเปลี่ยนเส้นทาง 301 ใช้ 302 จนกว่าการทดสอบจะเสร็จสิ้นเนื่องจากเบราว์เซอร์จะแคช 301 ดูhttps://stackoverflow.com/a/9204355/3217306
อัปเดต:ฉันเข้าใจผิดเล็กน้อย.
ตรงกับอักขระทั้งหมดยกเว้นบรรทัดใหม่ดังนั้นรวมถึงช่องว่างด้วย นอกจากนี้นี่คือข้อมูลสรุปของ regex ที่มีประโยชน์
แหล่งที่มา:
http://community.sitepoint.com/t/what-does-this-mean-rewritecond-request-filename-fd/2034/2
https://mediatemple.net/community/products/dv/204643270/using-htaccess-rewrite-rules
หากต้องการลบนามสกุล. html ออกจาก URL ของคุณคุณสามารถใช้รหัสต่อไปนี้ใน 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]
หมายเหตุ: หากคุณต้องการลบส่วนขยายอื่น ๆ ตัวอย่างเช่นการลบนามสกุล. php เพียงแค่แทนที่htmlทุกที่ด้วยphpในโค้ดด้านบน
ด้วย. htaccess ภายใต้ apache คุณสามารถเปลี่ยนเส้นทางดังนี้:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html$ /$1 [L,R=301]
สำหรับการลบ. html ออกจาก url เพียงแค่เชื่อมโยงไปยังหน้าที่ไม่มี. html
<a href="http://www.example.com/page">page</a>
!-f
สิ่งนี้ควรได้ผลสำหรับคุณ:
#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]
คุณจะต้องแน่ใจว่าคุณมี Options -MultiViews
เช่นกัน
ไม่มีข้อใดที่ใช้ได้ผลกับฉันในโฮสต์ cPanel มาตรฐาน
สิ่งนี้ได้ผล:
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]
ขอบคุณสำหรับการตอบกลับ ฉันได้แก้ไขปัญหาของฉันแล้ว สมมติว่าฉันมีเพจของฉันภายใต้http://www.yoursite.com/html จะใช้กฎ. htaccessต่อไปนี้
<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>
ฉันใช้. htacess นี้เพื่อลบ. html ส่วนที่เกินออกจากไซต์ url ของฉันโปรดตรวจสอบว่ารหัสนี้ถูกต้อง:
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 /
บิต น่าเสียดายที่ฉันไม่เข้าใจว่าทำไมมันถึงได้ผล แต่ฉันคิดว่าฉันจะได้เรียนรู้ในไม่ช้า
สำหรับผู้ที่ใช้ Firebase โฮสติ้งจะไม่มีคำตอบใด ๆ ในหน้านี้ เนื่องจากคุณไม่สามารถใช้.htaccess
ในโฮสติ้ง Firebase คุณจะต้องกำหนดค่าไฟล์ firebase.json เพียงเพิ่มบรรทัด"cleanUrls": true
ในไฟล์ของคุณและบันทึก แค่นั้นแหละ.
หลังจากเพิ่มบรรทัด firebase.json แล้วจะมีลักษณะดังนี้:
{
"hosting": {
"public": "public",
"cleanUrls": true,
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
]
}
}
ในการลบนามสกุล. html ออกจาก URL ของคุณคุณสามารถใช้รหัสต่อไปนี้ใน 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]
ขอบคุณ
RewriteRule /(.+)(\.html)$ /$1 [R=301,L]
ลองดูสิ :) ไม่รู้ว่าใช้ได้หรือเปล่า