2016-09-21 32 views
0

我有一個網站,我用純靜態的HTML頁面,我想在網頁上沒有.html擴展名。我讀過幾十個不同的鏈接,用不同的方式編輯.htaccess文件來重寫沒有擴展名的網址,但沒有運氣。如何.htaccess更改不起作用時從URL中刪除.html擴展

奇怪的是,我在我的其他網站上有.htaccess文件(bradleyoesch.com),我可以在最後訪問沒有.html的網頁(例如bradleyoesch.com/projects)。但是,我刪除了該網站上的.htaccess文件,它仍然有效(bradleyoesch.com目前沒有.htaccess文件),暗示我兩年前還做了其他事情以使其起作用,或者我需要重新啓動某些內容接受更改(我已使用sudo service apache2 restart在兩臺服務器上重新啓動了apache)。

我錯過或忘記了什麼,或者爲什麼我的.htaccess更改不起作用?我目前的.htaccess文件內容如下。

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

昨天我也有同樣的問題。簡單的解決方案:刪除您的瀏覽器緩存。 Firefox:設置>高級>網絡>立即清空--- Chrome:設置>高級>隱私>清除瀏覽數據。如有必要,應該有插件來暫時完全禁用緩存。 – AlexG

回答

1

好吧,這是最後的工作。我需要對apache2文件進行一些編輯以使所有內容協同工作。這假設你使用某種形式的Linux在你的服務器上運行apache2版本2+。

編輯/etc/apache2/sites-available/000-default.conf有以下幾行,只需將它們追加到最後(我把它們放在這行之後:# vim: syntax=apache ts=4 sw=4 sts=4 sr noet)。

<Directory /var/www> 
    Options Indexes FollowSymLinks Multiviews 
    AllowOverride All 
    Order allow,deny 
    allow from all 
</Directory> 

下列行創建或在根目錄下的HTML編輯.htaccess文件(我的是/ var/www/html等,並注意上述類似的目錄路徑):

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

當你對apache2 conf文件做任何修改,你必須重新啓動apache2,如果你還沒有,你想用a2enmod創建一些符號鏈接。否則,只需重新啓動apache2。

sudo a2enmod rewrite && sudo service apache2 restart 

對.htaccess進行更改時不需要重新啓動任何內容。一個簡單的方法來檢查它是否加載.htaccess是在那裏輸入亂碼來強制語法錯誤,那麼你的網頁將會出現500錯誤。

0

隨着重寫規則,你可以使用MultiViews允許Apache的與.html.php擴展加載頁面。只需在你的Apache配置或網站根目錄下使用這一行.htaccess:

Options +MultiViews 
+0

這不是關於允許多個擴展,這些都是靜態的html頁面。無論如何,我嘗試過它,似乎並沒有工作 –

+0

在我的Apache'Options + MultiViews'工程很好,並且在URL中請求'/ about'時加載'/ about.html'。 – anubhava