![](/img/trans.png)
[英]ErrorDocument 404 /404.php is not working in .htaccess file in 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.