2013-01-04 210 views
2

我試圖從我的網址中使用.htaccess中的此代碼(代碼在線發現)從我的網站中刪除.html擴展名。Apache2重寫規則不起作用

Options +FollowSymLinks 

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

它不工作。我發現一個帖子說使用這個測試是否啓用國防部重寫:/usr/local/apache/bin/httpd -D DUMP_MODULES | grep rewrite

它返回:在錯誤日誌

Syntax OK 
rewrite_module (static) 

沒有。如果它很重要,這是在一個服務器與WHM和cPanel。我的其他.htaccess指令正在工作。

+0

可以粘貼包含.hmtl在內的完整網址嗎? – Xfile

回答

1

你的代碼與你正在努力完成的事情完全相反。正確的代碼是:

Options +FollowSymLinks 

RewriteEngine on 

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

如果您對現有的HTML文件的請求,這些條件要防止規則做任何事情:

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

,因爲他們說,如果要求文件不存在並且不是目錄...並且當您請求一個html文件時,它將通過-f測試失敗。所以規則什麼都不做。

你要匹配類似的實際要求:

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

這重定向爲現有的HTML文件相同的路徑,但是減去延期的要求。然後您可以在內部重寫它:

RewriteCond %{REQUEST_FILENAME}\.html -f 
RewriteRule ^(.*)$ /$1.html [L]