.htaccess不一致的重定向行为

.htaccess不一致的重定向行为,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我得到的结果与我认为完全相同的结果不一致。有人能看到我遗漏了什么吗 这是我的.htaccess文件。您可以看到我试图将3个目录的所有内容重定向到我的“文件未找到”页面的位置 问题是只有一个目录正确重定向。我所说的“正确”是指,它在浏览器的url栏中显示它正在显示www.hhoprofessor.com/file\u not\u found bak目录可以工作,但其他目录都不能工作。例如,请参见以下示例: 当我键入www.hhoprofessor.com/bak/random_file_name时

我得到的结果与我认为完全相同的结果不一致。有人能看到我遗漏了什么吗

这是我的.htaccess文件。您可以看到我试图将3个目录的所有内容重定向到我的“文件未找到”页面的位置

问题是只有一个目录正确重定向。我所说的“正确”是指,它在浏览器的url栏中显示它正在显示www.hhoprofessor.com/file\u not\u found

bak目录可以工作,但其他目录都不能工作。例如,请参见以下示例:

当我键入www.hhoprofessor.com/bak/random_file_name时,它会重定向到www.hhoprofessor.com/file_not_found。这是正确的行为

当我对其他两个目录执行相同操作时,我得到以下结果:在地址栏中键入www.hhoprofessor.com/inc/random_file_name不会更改,但会正确显示“未找到文件”页面的内容。当我尝试页面子目录时也会得到相同的结果

我需要他们做一个完整的转发,就像他们做的/bak子目录一样。我不明白为什么同一个指令的运行方式不同

我在Chrome和Opera中试过,它们都有相同的行为。Apache版本是2.4.33,这是一个托管lamp服务器

ErrorDocument 404 /file_not_found

Redirect 301 /.htaccess  http://www.hhoprofessor.com/file_not_found

RewriteEngine On
RewriteBase /

# Redirect directories to file_not_found.php:
RewriteRule ^inc/(.*) file_not_found [R,L]
RewriteRule ^bak/(.*) file_not_found [R,L]
RewriteRule ^pages/(.*) file_not_found [R,L]

# require www prefix
RewriteCond %{HTTP_HOST} ^hhoprofessor\.com$ [NC]
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTPS}:s on:(s) 
RewriteRule ^(.*)$ http%1://www\.hhoprofessor\.com/$1 [R=301,L]

# Homepage: /   redirects to http 
RewriteCond %{HTTPS} on
RewriteRule ^$  http://www\.hhoprofessor\.com/ [R=301,L]
还有一个可能适用的数据:这是一个附加域,位于主域的子目录中。我已在主域的.htaccess顶部添加了以下行,该行应停止处理任何进入加载项域的内容:

RewriteCond %{HTTP_HOST} ^(www\.)?hhoprofessor\.com$
RewriteRule ^.*$ '-' [L]
在查看该文件时,我不知道它会如何影响这种情况,即使整个主域.htaccess都在处理中


有人能看到我遗漏了什么吗?

如果您想调试这种行为,首先要采用的反射是分析网络流量和http头。多亏了这一点,您已经看到
inc
页面
文件夹都以
403
禁止)代码结束。您需要更改这些文件夹(可能是递归的文件)的权限

bak
文件夹测试输出:

inc
(与
页面相同)文件夹测试输出:


但是从搜索引擎优化的角度来看,你试图做的并不好。您应该只保留
ErrorDocument 404/file\u not\u found
,并删除重定向规则。它会自动发送一个
404
未找到)代码,而无需更改url。快速提醒:更改url意味着重定向,在您的情况下,您会发送一个
302
临时移动的)代码,而不是
404
,这不是预期的行为。

好的,多亏了Justin的回答,这个问题得到了解决。虽然,我不知道确切的原因。所有3个目录的文件权限和所有权相同。所以,我仍然不知道为什么一个工作正常,而另外两个没有。不存在导致403状态代码的权限或所有权问题。目录为755份,文件为644份

但是我试着对这3个dir 700进行权限设置。之后,所有重定向都按预期工作。但是,这是违反直觉的。错误的行为给出了403(禁止)的状态代码。然后,当我更改权限使目录确实被禁止时,它用302重定向。算了吧,但它是有效的

顺便说一句,如果可以的话,我会更支持贾斯汀的答案。分析状态代码的提示将帮助我解决未来的问题。我不知道那件事

稍后编辑:
我已删除所有重定向,现在只使用文件权限。我设置了404和403文档,一切正常。值得注意的是,使用ErrorDocument指令会导致这些文件与302代码一起发送。但这应该是搜索引擎优化明智的,因为这些都没有链接到任何地方。所有正常页面的状态代码都是200。

谢谢你,贾斯汀。我在Chrome中找到了相同的功能。从现在起,我将使用它。非常有用但当我查看dir和files权限时,它们是相同的。您知道生成403代码的另一种方法吗?--此外,SEO不应该受到损害,因为没有这些目录的链接。我只是想阻止任何人在他们不该去的地方四处搜寻,猜测文件名。对该站点的每次调用都会转到index.php,当然,像图像、css之类的东西除外,它们是直接调用的。将加载站点上链接的所有页面,而不重定向。我遗漏了什么吗?如果不是直接的权限问题,请确保这些文件夹不是所有权权限问题。否则,它可能与您的apache配置有关