我的目標是降低我應用程序簽名的可見性。這並非默默無聞,而僅僅是深度防禦的淺薄表現,因此乍一看攻擊者無法判斷它是否爲靜態站點。 (也是美容;即使在正常操作中它們永遠不會變得可見,它只是覺得「更清潔」以隱藏應用細節)。因此,我想拒絕訪問某些目錄而不透露它們存在,因此如果用戶請求不存在的頁面,我必須給出與應用程序相同的404響應。mod_rewrite強制內部重定向
在.htaccess
文件,我有以下幾點:
RewriteEngine on
RewriteCond "%{REQUEST_FILENAME}" "!-f"
RewriteCond "%{REQUEST_FILENAME}" "!-d"
RewriteRule "^(.*)" "index.php?page=$1"
RewriteRule "^(secret_dir1|secret_dir2)(/.*)?$" "index.php?page=404"
其中index.php
根據「網頁」的值呈現一個好的漂亮的網頁GET參數;如果「頁面」與應用程序級別的頁面不對應,或者「頁面」設置爲404,則該腳本將呈現具有適當標題和所有內容的漂亮404頁面。
這是問題發生的地方。 「應用程序級」404s按預期工作;一個404頁面被渲染。但是,如果用戶請求mydomain.com/dir_i_am_trying_to_hide
,他們會得到301重定向到mydomain.com/dir_i_am_trying_to_hide/?page=404
:外部重定向而不是內部重寫。
它爲什麼發出一個外部重定向而不是隻重寫url?我該如何正確地避免這種情況?除此之外,是否有強制服務器執行內部重寫的方法? (Apache的文檔似乎表明你可以強制重寫規則是外部的,但不是相反的方式)
要清楚,'^ dir_i_am_trying_to_hide'不是真正的正則表達式:D – dn3s
這些規則不應該導致301.也許你的index.php裏面有一些東西在做它? –
我無法想象什麼。我只在整個應用程序中調用了header()函數,這是'header(「$ {_ SERVER [」SERVER_PROTOCOL「]} 404 Not Found」);'在呈現404頁面之前。 – dn3s