2011-04-20 541 views
65

你有任何想法如何從靜態頁面的URL中去除.html。另外,我需要將.html的任何網址重定向到沒有網址的網址(即www.example.com/page.html到www.example.com/page)。如何從URL去除.html

+0

也許與正則表達式? – 2011-04-20 12:18:42

+0

通過「刪除.html」,你的意思是「不需要.html存在」? – 2011-04-20 12:26:37

+0

@Tomalak:是的,也可以將「.html」的網址重定向到沒有鏈接的網址。我的問題是,這導致無限重定向。我目前的設置允許www.example.com/page.html和www.example.com/page都可訪問,這不是SEO友好的。 – Dave 2011-04-20 22:55:23

回答

10

感謝您的回覆。我已經解決了我的問題。假設我有我的網頁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> 
59

隨着apache下的.htaccess你可以做這樣的重定向:

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

至於從URL的.html去除,只需鏈接到頁面,而不html的

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

這對我無能爲力。有沒有理由不起作用? – 2014-02-02 04:02:45

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

試試這個:)不知道它是否有效。

6

我用這個.htacess從我的網址網站中刪除的.html extantion,請確認這是正確的代碼:

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] 
+0

這似乎對我來說很有用,與此處介紹的其他解決方案不同,謝謝。但是我會補充說,你仍然需要更新HTML中的鏈接(所以如果你最初是鏈接到你的.html文件的話,你應該將它更新爲,然後它就可以工作。) – Lorenzo 2014-03-01 20:17:24

+0

本地主機。 – Jayo2k 2015-06-03 22:43:30

+0

我的核心變化是'RewriteBase /'位。不幸的是,我不明白它爲什麼起作用,但我想我很快會學到。 – 2017-02-21 01:52:44

51

這應該爲你工作:

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

我在這個代碼中得到了一個404 Godaddy,我修正了它:Options + FollowSymLinks -MultiViews -Indexes在最上面。 – Labanino 2014-02-13 13:10:24

+1

它的工作..真棒。 – 2016-05-01 11:26:21

+0

這對我來說... thnx – 2016-05-19 05:50:32

12

你還需要確保你有Options -MultiViews

以上都不是標準cPanel主機上的工作。

這工作:

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

我覺得喬恩的答案的一些解釋將是建設性的。以下:

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

檢查,如果指定的文件或目錄分別不存在,則重寫規則進行:

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

但到底是什麼意思呢?它使用regex (regular expressions)。這裏有一點我早些時候做的... enter image description here

認爲這是正確的。

注意:當測試您的.htaccess不要使用301重定向。使用302直到完成測試,因爲瀏覽器將緩存301s。見https://stackoverflow.com/a/9204355/3217306

更新:我有點誤,.匹配除了換行符以外的所有字符,所以包括空格。此外,here is a helpful regex cheat sheet

來源:

http://community.sitepoint.com/t/what-does-this-mean-rewritecond-request-filename-f-d/2034/2

https://mediatemple.net/community/products/dv/204643270/using-htaccess-rewrite-rules

+2

極好的圖表來幫助解釋答案。 – 2017-09-26 08:37:08

+0

301s和瀏覽器緩存的提示是解決了我的問題。 – Mark 2018-02-08 17:10:37

+0

非常豐富。 – Muema 2018-03-04 17:43:45

37

要從網址中刪除.html擴展,你可以在根/ 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擴展名,只需替換e html無處不在php在上面的代碼中。

+6

沒有其他答案爲我工作,但這一個,非常感謝! – 2016-03-20 01:23:06

+1

它適用於我:) – Javid 2016-08-04 04:56:30

+1

這一個也爲我工作。謝謝@starkeen。有一個^投票。 – JeremyS 2016-10-10 18:57:28