繁体   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