![](/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.