2014-01-21 51 views
1

我想完成我的.htaccess兩兩件事:的.htaccess不正確重寫的URL,.php文件,但對於OK .html文件

  1. 重定向所有請求www.blanklabs.com/boarddrive/faq(例如) www.blanklabs.com/boarddrive/faq.htmwww.blanklabs.com/boarddrive/faq.html,或者www.blanklabs.com/boarddrive/faq.phpwww.blanklabs.com/boarddrive/faq.php

  2. 瀏覽器的地址欄應該顯示剛剛www.blanklabs.com/boarddrive/faq,不帶擴展名。

這裏是我當前的.htaccess:

RewriteEngine On 

# -- new 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)\.html$ $1.php [L,QSA] 

在服務器上我有faq.html(現在),但我也試過同時具有faq.htmlfaq.php。最終它只是faq.php

.htaccess顯然是不正確的,因爲如果我去www.blanklabs.com/boarddrive/faq.html我得到正確的內容(從faq.html),但如果我去www.blanklabs.com/boarddrive/faq.php我得到一個500錯誤。即使在服務器上有faq.php,也會發生這種情況。

任何想法我做錯了什麼?不擴展是次要的,主要目標是將所有請求從html重定向到php文件。

+0

等待如果你擁有的faq.html和faq.php你不會使用這樣的比賽不會有重寫改寫條件。如果您希望faq.html像faq.php一樣行事,並且url保持爲/ faq,那麼您不應該在第一個位置擁有faq.html文件,同樣也不應該存在名爲/ faq的目錄。 –

回答

1

將此代碼放在您的DOCUMENT_ROOT/.htaccess文件:

RewriteEngine On 

# skip POST requests 
RewriteCond %{REQUEST_METHOD} POST 
RewriteRule^- [L] 

RewriteCond %{THE_REQUEST} \s/+(.+?)\.(php|html?)[\s?] [NC] 
RewriteRule^/%1 [R=301,L,NE] 

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

這正確地使地址沒有擴展名,但是當我轉到'faq.html'或'faq.php'時,仍然出現500錯誤。如果我在我的服務器中只有'faq.html',只是'faq.php',或兩者都會發生這種情況。 –

+0

你可以檢查你的Apache error.log,看看爲什麼500顯示了嗎? – anubhava

+0

它有這個錯誤:'文件「.../blanklabs.com/boarddrive/faq.php」可以按組寫入「。這是一種權限錯誤嗎?該文件的權限爲'666' –

0

您需要重定向 /faq.htm /faq.php

[使用重定向指令]

到/ FAQ

現在只是將重寫規則稍後條件[/ FAQ ]到

/faq.php

它應該工作。

+0

你能提供一個代碼示例嗎? –