【发布时间】:2021-05-22 22:39:36
【问题描述】:
我有主域xyz.com,它的主文件夹是/home/username/public_html/
在同一台服务器上,我也有子域sub.xyz.com,它的主文件夹是/home/username/public_html/subfolder/
我正在为子域创建一个网站,并且正在尝试使用 .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 在所有情况下均等。
【问题讨论】:
-
嗯,这就是你实现的!
ErrorDocument指令负责处理对那些“不存在的文件”的请求并显示该脚本的输出。但是,对于“现有文件”,该指令不匹配,而是您的RewriteRule匹配,这 显式 实现了对该脚本的外部重定向。外部重定向会更改浏览器中可见的 URL,因为它重定向浏览器。 -
嗯,从某种意义上说,这不是我应该做什么的答案,但从某种意义上说,这是我不应该做的答案。它帮助我找到答案并更好地理解语法。 Tnx
-
没错,这不是答案,根本不是答案,这就是为什么我没有将其作为答案发布,而是作为评论发布的原因。我没有解释你不应该做什么,而是你 做了什么 。至于让你自己前进。因为这里不是给你一个sn-p来复制和粘贴的地方,而是让你了解你在做什么。请注意,您应该能够自己使用您的工具,这是在此处获得帮助的必要条件。我们不是来为您工作,而是帮助您自己解决问题。
-
问自己这个问题:你为什么要实现
RewriteRule?你想用它来达到什么目的? -
再次感谢。正如我之前所说,您的评论帮助我自己找到了答案。所以我投了赞成票。我也不知道的是:对 cmets 的支持是否与对答案的支持具有相同的价值,我应该现在写答案还是保持开放?
标签: php apache .htaccess redirect http-status-code-404