2012-12-13 513 views
3

.html擴展我知道這個問題以前有人問,但沒有人知道的隱藏HTML擴展的好方法。我試過很多代碼&許多從https://stackoverflow.com/的答案,但我沒有看到結果。這就是我Ÿ再次問你如何隱藏網站的網址

我有一個靜態的網站,我想刪除擴展清理我的網址。我正在處理靜態html文件。

在移除的延長,網址會讀website.com/about.html

與擴展刪除,它看起來像website.com/about。希望很明顯。

我有.htaccess文件,我嘗試了許多代碼,但忽略了最低的工作。下面是一些代碼

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



RewriteCond %{THE_REQUEST} \ /(.+/)?index(\.html)?(\?.*)?\ [NC] 
RewriteRule ^(.+/)?index(\.html)?$ /%1 [R=301,L] 

RewriteCond %{ENV:REDIRECT_STATUS} ^$ 
RewriteRule ^(.+)\.html$ /$1 [R=301,L] 

RewriteCond %{SCRIPT_FILENAME}.html -f 
RewriteRule [^/]$ %{REQUEST_URI}.html [QSA,L] 



RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/ 
RewriteRule ^index\.html$ http://%{HTTP_HOST}/ [R=301,L] 



RewriteEngine On 
RewriteBase/
RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteRule ^(.*)$ $1.html [NC,L] 



RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.html -f 
RewriteRule ^(.*)$ $1.html 


RewriteBase/
RewriteEngine on 
RewriteRule ^(.*)\.htm$ $1.html [nc] 


RewriteCond %{REQUEST_FILENAME}.html -f 
RewriteRule !.*\.html$ %{REQUEST_FILENAME}.html [L] 

但我沒有看到任何結果... :(

回答

3

你有你的規則相反的(第一個原本工作):

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ $1.html [L] 

你的原規則爲RewriteRule ^(.*)\.html$ $1 [L],這意味着「如果請求的資源名以.html結尾,那麼向瀏覽器發出重定向,告訴它詢問我們是否在沒有HTML的情況下有相同名稱的東西」,結果是404(因爲Apache doesn'沒有什麼要說的爲.html服務'少資源)。

通過切換.html到我們改變規則說「如果所請求的資源名稱是不是磁盤上的文件和目錄的路徑RewriteRule ^(.*)$ $1.html [L]然後嘗試重新路由請求(在內部,不告訴瀏覽器)彷彿它以.html結尾「。

+0

我試圖與此代碼..但是這麼想的工作:( – Natasha

+0

此代碼並沒有爲網站工作之一 – jtheletter

1

請注意,您不需要複雜的(本質上)RewriteRules這樣的任務。

mod_negotiation apache模塊默認情況下默認啓用,它提供了Multivews選項的行爲。

如果服務器收到/一些/目錄/ foo的請求和/一些/目錄/ foo的不存在,則服務器讀取的目錄尋找名爲foo的所有文件。*,並有效假貨了類型映射,它命名所有這些文件,爲它們分配相同的媒體類型和內容編碼,如果客戶端通過名稱請求其中的一個,將會有這種編碼。然後,它會根據客戶的要求選擇最佳匹配,然後返回該文檔。

.i.e請求foo/bar將成爲foo/bar如果我們的目錄,並將seak爲foo/bar.htmlfoo/bar.txt和這樣等如不。

你只需要確保這個選項在當前的情況下(例如目錄)

Options +Multiviews 
+0

+1 - 我不知道'mod_negotiation'! –

0

使用本

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