Apache-2.2

從一個域訪問文件夾時返回 404 頁面,但允許從其他域和 IP 地址訪問

  • February 13, 2011

情況:

  • 當從 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 評估任何進一步的規則。

引用自:https://serverfault.com/questions/234837