這是關於Apache,特別是.htaccess
指令。我們假設存在/index.htm
。Apache,.htaccess:FilesMatch是否匹配URI或實際文件名?
我想有允許被訪問(僅.htm
)文件的白名單,所以我想出了這一點:
Order deny,allow
Deny from all
<FilesMatch "\.htm$">
Allow from all
</FilesMatch>
我看到的是,請求www.domain.com/index.htm
當一切工作正常,但當請求www.domain.com
(空URI)時,我得到一個403響應(當然,我應該使用默認的index.htm
)。
經過一些測試,我發現這是因爲FilesMatch不允許使用空字符串,所以我想知道我是否理解得很好:[question#1a]我可以說FilesMatch匹配URI並且不是直接真正的文件名(文件系統中的一個)?
在此之後我試圖重寫空字符串:
RewriteEngine on
RewriteRule ^$ index.htm [L]
,沒有運氣,所以[問題#1B]我可以說,FilesMatch拒絕之前訪問任何重寫還是我做錯了什麼?
到底是唯一的工作解決方案,我想出來的是包括FilesMatch的正則表達式爲空字符串:
<FilesMatch "(^|\.htm)$">
[問題#2]這真的是最好的,甚至是唯一的解決這個問題的方法?我無法在網上找到我的解決方案,所以我擔心我從一開始就做錯了什麼...
謝謝!