.Html URL’den nasıl kaldırılır?


113

.htmlStatik bir sayfanın URL'sinden nasıl kaldırılır ?

Ayrıca, herhangi bir url'yi .htmlonsuz olana yönlendirmem gerekiyor. (yani, www.example.com/page.htmlhiç www.example.com/page).


1
".Html'yi kaldır" derken, ".html'nin bulunmasına gerek yok" mu demek istiyorsun?
— Orbit'te Hafiflik Yarışları

@Tomalak: Evet ve ayrıca url'leri ".html" ile olmayanlara yönlendir. Benim sorunum, bunun sonsuz yeniden yönlendirmeye yol açması. Mevcut kurulumum hem www.example.com/page.html hem de www.example.com/page erişilebilir olmasına izin veriyor ve bu SEO dostu değil.
— Dave


@Tomalak: İpuçları için teşekkürler. Mod_rewrite belgelerini okumak çok yardımcı oldu.
— Dave

Yanıtlar:


105

Sanırım Jon'un cevabının bir açıklaması yapıcı olacaktır. Devamındaki:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

belirtilen dosya veya dizin mevcut değilse, yeniden yazma kuralının devam ettiğini kontrol eder:

RewriteRule ^(.*)\.html$ /$1 [L,R=301]

Ama bu ne anlama geliyor? Normal ifadeler (normal ifadeler) kullanır . İşte daha önce yaptığım küçük bir şey ... görüntü açıklamasını buraya girin

Bunun doğru olduğunu düşünüyorum .

NOT: test ederken .htaccess do not 301 yönlendirmeleri kullanabilirsiniz. Tarayıcı 301'leri önbelleğe alacağından, test tamamlanana kadar 302'yi kullanın. Bkz. Https://stackoverflow.com/a/9204355/3217306

Güncelleme: Biraz yanıldım, .satırsonu hariç tüm karakterlerle eşleşiyor, dolayısıyla boşlukları da içeriyor. Ayrıca, işte yararlı bir normal ifade hile sayfası

Kaynaklar:

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


6
Cevabı açıklamaya yardımcı olacak mükemmel şema.
— Ric

301'ler ve tarayıcı önbelleğiyle ilgili ipucu sorunlarımı çözen şeydi.
— bgfvdu3w

@KnocksX Artık bir web yöneticisi değilim ve yardım edebilecek durumda değilim
— binaryfunt

84

.Html uzantısını URL'lerinizden kaldırmak için aşağıdaki kodu root / htaccess'te kullanabilirsiniz:

RewriteEngine on


RewriteCond %{THE_REQUEST} /([^.]+)\.html [NC]
RewriteRule ^ /%1 [NC,L,R]

RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^ %{REQUEST_URI}.html [NC,L]

NOT: Başka bir uzantıyı kaldırmak istiyorsanız, örneğin .php uzantısını kaldırmak istiyorsanız, her yerde html'yi yukarıdaki kodda php ile değiştirin .


10
Diğer cevapların hiçbiri benim için işe yaramadı, ama bu işe yaradı, çok teşekkürler!
— Emmet Arries

2
bu da benim için çalıştı. Teşekkürler @starkeen. ^ Oy verin.
— JeremyS

2
Mükemmel çalıştı. Teşekkür ederim!
— ixany

bu benim için dosya uzantısını kaldırıyor, ancak o sayfaya yönlendirmiyor
— Bhargav Venkatesh

74

Apache altındaki .htaccess ile yeniden yönlendirmeyi şu şekilde yapabilirsiniz:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html$ /$1 [L,R=301] 

.Html’yi url’den kaldırmaya gelince, sayfaya .html'siz bağlantı vermeniz yeterlidir.

<a href="http://www.example.com/page">page</a>

23
Bu benim için hiçbir şey yapmıyor. Çalışmamasının bir nedeni var mı?
— Michael Yaworski

İstenen bağlantı için gerçek bir dosyanız var mı? Yani tetikleyecek!-f
— Martijn

72

Bu sizin için çalışmalı:

#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]

3
Godaddy'de bu kodla bir 404 alıyordum ve bunu en üste Options + FollowSymLinks -MultiViews -Indexes koyarak düzelttim.
— Labanino

1
Bunun en iyi ve en eksiksiz cevap olduğunu düşünüyorum, teşekkürler!
— ctekk

Bunu localhost'ta yapmaya çalıştım ama çalışmıyor, yapmam gereken başka bir şey var mı, .htaccess dosyasını bağlamam gerekiyor mu veya sayfa onu nasıl tanıyor?
— Pianistprogrammer

.Php uzantısını example.com/page.html'den example.com/page'e # 301'e nasıl eklerim, bu mümkün mü?

20

Sahip olduğunuzdan da emin olmanız gerekecek Options -MultiViews.

Yukarıdakilerin hiçbiri benim için standart bir cPanel ana bilgisayarında çalışmadı.

Bu işe yaradı:

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

Yukarıdaki tüm cevapların arasından sonunda işe yaradı .. İnanıyorum çünkü sitem Godaddy'de cPanel ile barındırılıyor. Anahtar Seçenekler -MultiViews
— Brad Vanderbush

Evet, bu bölümdeki hiçbir şey bu cevabı beklemez! Günü kurtardın!
— Neil Bannet

Teşekkürler dostum. Diğerlerinin neden beklendiği gibi çalışmadığından emin değilim.
— Nanoo

13

Cevaplarınız için teşekkürler. Sorunumu zaten çözdüm. Sayfalarımın http://www.yoursite.com/html altında olduğunu varsayalım , aşağıdaki .htaccess kuralları geçerlidir.

<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>

6

Bu .htacess'i url sitemden .html uzantısını kaldırmak için kullanıyorum, lütfen bunun doğru kod olduğunu doğrulayın:

    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]

Bu, burada sunulan diğer çözümlerden farklı olarak benim için işe yaradı, teşekkür ederim. Yine de HTML'nizdeki bağlantıları güncellemeniz gerektiğini eklemeliyim (bu nedenle, başlangıçta .html dosyanızı <a href="page1.html"> </a> olarak bağlantılandırıyorsanız, güncellemelisiniz) <a href=" example.com/page1"> </ a > olarak ve sonra çalışacaktır.)
— Lorenzo

Benim için temel değişiklik RewriteBase /biraz oldu. Maalesef neden işe yaradığını anlamıyorum, ama sanırım yakında öğreneceğim.
— Keno Clayton

4

Firebase hosting kullananlar için cevapların hiçbiri bu sayfada çalışmayacaktır. Çünkü .htaccessFirebase barındırmada kullanamazsınız . Firebase.json dosyasını yapılandırmanız gerekecektir. "cleanUrls": trueDosyanıza satırı ekleyin ve kaydedin. Bu kadar.

Satırını ekledikten sonra firebase.json şöyle görünecektir:

{
  "hosting": {
    "public": "public",
    "cleanUrls": true, 
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ]
  }
}

2

.Html uzantısını URL'lerinizden kaldırmak için, root / htaccess'te aşağıdaki kodu kullanabilirsiniz:

#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]

Teşekkürler


-1
RewriteRule /(.+)(\.html)$ /$1 [R=301,L] 

Bunu deneyin :) işe yarayıp yaramadığını bilmiyorum.


4
İşe yarayıp yaramadığından emin değilseniz, cevap olarak göndermemelisiniz.
— Bunun önemi var mı
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.