:::

只准連首頁!在Apache設定檔禁止連線到子目錄設定 / Deny Access to All Subdirectories by Using Apache Server Configuration

image

如果Apache網頁伺服器只想讓人連首頁,但是卻不想讓人連到子目錄的話,我們可以透過增加Apache的規則設定,利用<Location>跟<LocationMatch>來達到這個目的。


Apache設定檔在哪裡? / Where is Apache Server’s Configuration File?

這邊很難一言說明Apache設定檔的位置。因為Apache被應用在很多架站軟體套件包裡面,例如AppServXAMPP。而且不同作業系統的Apache會被安裝在不同位置,因此我沒辦法確切說明Apache設定檔放在哪裡。

不過有個簡單的方法可以找到Apache設定檔,請搜尋「httpd.conf」即可。

image

找到httpd.conf之後,請使用純文字編輯軟體來修改吧。個人推薦使用Notepad++ Portable

設定範例 / Configuration Example

image

請在設定檔最後插入以下設定:

<Location "/">
    Order allow,deny
    Allow from all
</Location>
<LocationMatch "^/(.+)/">
    Order deny,allow
    Deny from all
</LocationMatch>

修改之後請記得要重新啟動Apache伺服器,這樣修改後的設定檔才會生效喔。

測試連線 / Access Test

接下來連線看看吧。

2016-07-27_232758 - Copy

首先是連到首頁,看來是沒問題,正常連線!

2016-07-27_232028 - Copy

再來連線到子目錄temp,結果就出現403禁止連線的訊息了。到此為止設定大成功!


結語 / Conclusion

寫這篇的原因是因為最近我發現本機測試用的伺服器被駭客了 OTL 而且還是常見的PHP鑽漏洞的方法。雖然說只是測試用伺服器,就算被駭客也不會被取得什麼機密資訊,但是被這樣鑽漏洞還是令人覺得不舒服。反正這臺只是本機測試用,我索性就把它全部關閉外網連線,只留下首頁正常運作,這樣能夠供內部其他服務確認伺服器存活就好。

然而當我要找尋這樣的解決方案時,卻發現網路上用<Location>跟<LocationMatch>來設定的範例非常的少,大多數都是用<Files>或<Directory>來設定。因此這篇其實我是參考Derick Schoonbee以<Directory>跟<DirectoryMatch>的範例來做修改的。

實際上在使用的時候,為了本機測試方便,我還搭配了「Allow from ::1 127.0.0.1」這樣的設定,讓本機端可以正常連線而不會被拒絕。如果對Apache設定檔有任何問題的話,歡迎在下面的留言功能發問喔。