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