2016-02-21 22 views
0

我目前使用的網站上下面的.htaccess指定一個文件類型的URL:僅重寫如果沒有在請求

RewriteEngine On 

RewriteCond %{REQUEST_URI} ^/$ 
RewriteRule (.*) /home [R=301] 

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

它工作正常,並重定向的URL,如www.test.com/page2www.test.com/page2.php

不過,我有幾個文件,我想網站的用戶能夠下載,並且我剛剛意識到,重寫規則正在改變請求像page2/file.pdfpage2/file.pdf.php,這當然會返回一個404

只有在請求中未指定其他文件類型時,如何修改規則以請求.php文件?

回答

1

您可以輕鬆修改規則,以便在重寫它之前檢查php文件是否存在。如果它不是一個PHP文件,它不會重寫。試試這些規則。

RewriteEngine on 

#ignore real files and directories 
RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule^- [L] 

#redirect root to /home 
RewriteRule ^/?$ /home [R=301,L] 

#check if php file exists and rewrite to file 
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f 
RewriteRule ^(.+?)/?$ $1.php [NC,L] 
+0

爲什麼downvote?答案是有效的。 –

+0

這真是太棒了,完成這份工作,謝謝!唯一的一點是,它現在允許直接瀏覽文件結構,如果輸入的路徑是一個目錄。是否有可能防止這種情況發生? –

+0

這是通過索引處理的。將'Options -Indexes'添加到htaccess文件的頂部。此外,如果這對你有用,請接受答案。 –