Apache-2.2
從一個域訪問文件夾時返回 404 頁面,但允許從其他域和 IP 地址訪問
情況:
- 當從 example.com 域訪問文件夾(“隱藏”)時,我想返回 404 頁面(“404.php”)。
- 我希望可以從子域(“hidden.example.com”)或不同域(“hidden.com”)訪問同一個文件夾,這兩個域都配置在單個 VirtualHost 條目中。
- 伺服器有多個它偵聽的 IP 地址。每個 IP 地址都提供來自 example.com 域的相同內容(共享一個 VirtualHost 條目。)我希望可以從 IP 地址訪問該文件夾。
- 伺服器配置為使用 SSL/TLS/HTTPS。HTTPS 在 example.com 上是可選的,但使用下面顯示的重寫規則在隱藏文件夾的 .htaccess 文件中強制執行 HTTPS。
/www/hidden/.htaccess
RewriteCond %{HTTPS} !=on RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
我知道 {SERVER_ADDR} 給出了伺服器的 IP 地址,但它會返回客戶端請求的地址嗎?
我也開始認為 VirtualHosts 文件中的某些內容會更合適。對此有什麼想法嗎?
應該允許什麼:
http://87.65.43.21/hidden/ https://87.65.43.21/hidden/ http://12.34.56.78/hidden/ https://12.34.56.78/hidden/ http://hidden.example.com/ https://hidden.example.com/ http://hidden.com/ https://hidden.com/ http://www.hidden.com/ https://www.hidden.com/
什麼應該是 404-ed 與 404.php
http://example.com/hidden/ https://example.com/hidden/ http://www.example.com/hidden/ https://www.example.com/hidden/ http://example.com/hidden/hiddenfile.php https://example.com/hidden/hiddenfile.php etc.
謝謝。
您可以通過在 .htaccess 中添加一些 mod_rewrite 魔法來實現這一點
RewriteCond %{HTTP_HOST} ^example\.com [NC] RewriteCond %{HTTP_HOST} ^www\.example\.com [NC] RewriteRule .* http://www.example.com/404.php [R=301] RewriteCond %{HTTPS} !=on RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
這只是一個範例,您可以如何做到這一點,當然您可以更改規則的順序和它們的目的地,只要記住添加
[L]
將阻止 mod_rewrite 評估任何進一步的規則。