簡體   English   中英

.htaccess 重定向顯示 404.php 文件的絕對路徑。 如何避免這種情況?

[英].htaccess redirect is showing absolute path of the 404.php file. How to avoid that?

我有主域xyz.com ,它的主文件夾是/home/username/public_html/

在同一台服務器上,我也有子域sub.xyz.com ,它的主文件夾是/home/username/public_html/subfolder/

我正在為子域創建一個 web 站點,並且我正在嘗試使用 .htaccess 文件進行一些重定向。 我已將 404.php 文件放在子域的主目錄中。 還有用於子域的 .htaccess 文件和.htpassword 文件。 出於此測試的目的,我已重命名主域的 .htaccess 文件和子域的 .htaccess 文件的簡化版本,如下所示:

ErrorDocument 404 /404.php
RewriteEngine on
RewriteRule ^\. /404.php [R=404,L]

當我寫不存在的文件名時,例如sub.xyz.com/non.existing瀏覽器中的地址保持不變,我看到的是 404.php 文件的內容。 美好的。

但是當我編寫現有文件名時,例如sub.xyz.com/.htpassword ,瀏覽器中的地址更改為: sub.xyz.com/home/username/public_html/subfolder/404.php從而顯示我的目錄結構。

奇怪的是,當我編寫不存在的文件名sub.xyz.com/.htpasswords時也會發生同樣的情況,但是對於不存在的文件名sub.xyz.com/.htpasswor & sub.xyz.com/.htpassword1一切正常

我應該怎么做才能使現有文件和不存在文件的行為相同?

對於所有情況,地址應保持不變,或更改為 sub.xyz.com/404.php 對於所有情況。

由於@arkascha 選擇不給出直截了當的答案,而是暗示應該改變什么,我將把它寫下來。 現在,當我知道我在“禁止”下的RewriteRule Flags頁面上的 Apache 文檔中發現的問題到底在哪里時,我的問題的答案

此示例對重寫目標使用“-”語法,這意味着請求的 URI 未被修改。

所以正確的 .htaccess 部分看起來像這樣:

ErrorDocument 404 /404.php
RewriteEngine on
RewriteRule ^\. - [R=404,L]

所以這樣,URI 保持不變,用戶會看到 404.php 文件的內容,就像我想要的那樣。

另一個重要通知:我使用的示例是一個錯誤的示例,我已將 file.htpassword 移動到文件夾 public_html 下,但它對於您不想向惡意用戶透露其存在的其他文件很有用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM