重定向到主页而不是404错误页面!

3

我正在使用PHP。我有一个像下面这样的.htaccess文件,它将重定向到主页而不是404错误页面:/ 这里可能出了什么问题?感谢帮助!非常感谢!

ErrorDocument 404 /new/err404.html
RewriteEngine On
RewriteBase /new/

RewriteRule ^login.html$ index.php?s=login&a=loginDo [QSA,L]
RewriteRule ^logout.html$ index.php?s=login&a=logoutDo [QSA,L]
RewriteRule ^([^/]*).html$ index.php?s=$1 [QSA,L]
RewriteRule ^members/([^/]*)$ index.php?s=profile&username=$1 [QSA,L]
RewriteRule ^([^/]*)/$ index.php?s=listing&search[cityString]=$1 [QSA,L]
RewriteRule ^([^/]*)/([^/]*)/$ index.php?s=listing&search[neighborhoodString]=$2 [QSA,L]
RewriteRule ^([^/]*)/([^/]*)/([^/]*).html$ index.php?s=details&seo_friendly=$3 [QSA,L]
5个回答

4

您的错误文档的URL路径为/new/err404.html,去掉路径前缀/new/后变成了err404.html。这将与您的第三条规则匹配。

您可以扩展该规则并排除此类错误文档:

RewriteCond $1 !^err[45][0-9][0-9]$
RewriteRule ^([^/]*)\.html$ index.php?s=$1 [QSA,L]

非常感谢您,Gumbo。我刚刚将/new/err404.html更改为err404.html。现在它不会重定向到主页,但也没有重定向到404页面。它只是在内容中写入“err404.html”,而URL仍然是错误的:/ - designer-trying-coding
4
不应在出现错误时进行重定向。响应404状态代码与重定向具有不同的含义。 - Gumbo
我刚刚编辑了ErrorDocument 404 http://www.blabla.com/new/err404.html并且运行良好。但是根据我在论坛上阅读的内容,使用域重定向并不好。 - designer-trying-coding
我赞同你不应该在404页面上进行重定向。不存在的页面不应该试图假装它们存在!如果没有其他原因,这对SEO也没有帮助,而且Google也不建议这样做。 - Gabriel Hurley
非常感谢您的帮助!很抱歉我不太明白您的意思 :/ 如果页面不存在,它只会重定向到err404.html。或者您是指.htaccess代码的其他部分吗? - designer-trying-coding
1
@artmania:如果服务器无法找到所请求的文档,它将发送404状态码,并提供指定为404错误的文档(在本例中为/new/err404.html)。这是适当的行为。但如果您现在想重定向到其他内容(并且如果您在ErrorDocument中指定绝对URL,则会发生这种情况),则服务器将使用302状态码而不是适当的404状态码。302意味着“所请求的资源存在,请使用以下位置检索它”。 - Gumbo

1

我认为更重要的问题是,为什么你要将404重定向到你的主页?

用户需要知道页面已经失效或者出现了错误,Google也需要知道。你需要调查404错误的来源。

将404重定向到你的主页会告诉Google你的链接都没问题,但如果有很多链接被重定向,那么你的排名可能会受到影响,因为Google可能会将其视为重复内容。

比如说你设置了一个影响5000个页面的规则,那么Google就会看到5000个URL都指向同样的内容——主页,那么它怎么知道这些本来应该是404呢?

修复你的404错误。如果你有需要重定向的合法内容,那么请将它们重定向到新页面或最接近的语义页面。


我认为你误解了问题,提问者说他们想使用404页面,而不是将其重定向到主页。 - Gray Ayer

0

尝试在您的 .htaccess 文件中使用这些行,将域名和页面名称更改为您自己的。

ErrorDocument 404 http://www.yoursite.com/pagename.html

0
为什么你要尝试使用重写规则来处理404错误?为什么不直接使用以下方法:
 ErrorDocument 404 /new/err404.html

你是想要像第一行那样吗?你希望404与用户尝试访问的目录保持相对关系吗?


-1

只需将您的主页代码放入重定向页面中。将重定向页面中的代码更改为您的主页代码。这样,您就会拥有一个具有相同代码 - 您的主页的 /index.html 和 /404.html。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接