2016-12-08 209 views
0

我試圖從我的URL中刪除.html文件擴展名,使它們看起來更好。我見過很多這樣的例子,並且已經嘗試過了,但是我正在努力尋找只能在根目錄下工作的東西,並且不適用於任何子目錄或子域。只刪除URL中的.html擴展名

我可以得到任何幫助嗎?

實施例: example.org/test.html> example.org/test

example.org/food/xyz.html> example.org/food/xyz.html login.example.org/ something.html> login.example.org/something.html

+0

請問的問題更具體的方式。目前這個問題非常廣泛而且很難回答。爲什麼你的_specific_問題?爲什麼不能簡單地修改其中一個工作示例並根據需要進行調整? – arkascha

回答

0

你的問題有點模糊,所以我將集中討論你提到的主要問題:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !/.+\.html 
RewriteRule ^/?([^/]+)$ $1.html [L] 

替代做法:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME}.html -f 
RewriteRule ^/?([^/]+)$ $1.html [L] 

如果這僅限於單個主機名(因爲您的示例可能建議)取決於您的設置。如果您將規則放置在您的http服務器的真實主機配置中,而不是使用.htaccess樣式文件,則此類事情最容易完成。這也是爲什麼我添加的一般提示:


你應該總是喜歡在http服務器主機配置,而不是使用.htaccess樣式文件中這樣的規則。這些文件出了名的錯誤,很難調試,他們真的放慢了服務器。它們僅提供作爲的情況下最後的選擇,你沒有對主機配置控制(讀:真的很便宜的託管服務提供商),或者如果你有依賴於寫自己的重寫規則(這是一個明顯的安全惡夢的應用)。


在你寫,你也想短符號的評論,所以重定向用戶請求一個URL這樣的「文件擴展名」的版本沒有。

我實在看不出任何一點這樣的,但可以肯定的是可能的:

RewriteEngine on 

RewriteCond %{ENV:REDIRECT_STATUS} !^. 
RewriteRule ^. - [L] 

RewriteCond %{REQUEST_URI} ^/.+\.html$ 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule ^/?(.+)\.html$ /$1 [L,R=301] 

RewriteCond %{REQUEST_URI} !^/.+\.html$ 
RewriteCond %{REQUEST_FILENAME}.html -f 
RewriteRule ^/?([^/]+)$ /$1.html [L] 
+0

謝謝!這似乎工作得很好,但並不完全。出於某種原因,我仍然可以通過/about.html訪問,即使URL應該重寫爲/ about。無論哪種方式工作,但我希望它強制非HTML版本,如果這是有道理的.. –

+0

@ShaneT好了,添加了一個版本,應該實現這一點。 – arkascha

+0

那一個沒有工作。我已經做了一些重寫來強制HTTPS和WWW。 –