Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess htaccess未将站点上所有未找到的页面或URL重定向到404页面_.htaccess - Fatal编程技术网

.htaccess htaccess未将站点上所有未找到的页面或URL重定向到404页面

.htaccess htaccess未将站点上所有未找到的页面或URL重定向到404页面,.htaccess,.htaccess,尝试通过htaccess设置404页面未找到错误页面 问题是我们是否正在搜索 ... 它的重定向非常适合404.php。 但是如果我们在寻找 ... 它没有重定向到404.php并显示简单的文本消息“未找到文件” 简而言之,问题是若扩展名不是php,那个么它的重定向就可以了,但若扩展名是.php,那个么它的显示文件就找不到了 ErrorDocument 404 https://www.rsseosolution.com/404.php Options +FollowSymLinks Rewrit

尝试通过htaccess设置404页面未找到错误页面

问题是我们是否正在搜索 ... 它的重定向非常适合404.php。 但是如果我们在寻找 ... 它没有重定向到404.php并显示简单的文本消息“未找到文件”

简而言之,问题是若扩展名不是php,那个么它的重定向就可以了,但若扩展名是.php,那个么它的显示文件就找不到了

ErrorDocument 404 https://www.rsseosolution.com/404.php
Options +FollowSymLinks
RewriteEngine on
# ensure www.
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# ensure https
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteRule seo-package-(.*)-n-(.*)\.php$ seo-package-detail.php?id=$1&name=$2 [NC,L]
RewriteRule case-studies/(.*)-(.*)\.php$ case-studies.php?project=$1&id=$2 [NC,L]
RewriteRule tutorial/(.*)-(.*)\.php$ tutorial.php?topic=$1&id=$2 [NC,L]
RewriteRule blog-page-(.*)\.php$ blog.php?page=$1 [NC,L]
RewriteRule seo-tutorial-(.*)\.php$ seo-tutorial.php?page=$1 [NC,L]
RewriteRule frequently-ask-question-faq-(.*)\.php$ frequently-ask-question-faq.php?page=$1 [NC,L]
我要找的是。。。。。。。将所有未找到或错误的URL重定向到404.php

我在这里错过了什么

我认为这是因为我们正在用htaccess的.php扩展名重写一些URL,这就是为什么对于php,它说找不到文件,而对于其他URL,它完全重定向到404.php


是否有任何方法可以为所有未找到的页面和URL设置404.php,而不更改htaccess以前编写的文件的任何扩展名(.php)。

问题不在于您当前在
.htaccess
中的指令

这个问题很可能是由于服务器配置和PHP在服务器上的实现方式造成的。如果对
.php
文件的请求被代理到后端服务器进行处理,就像FastCGI类型配置中经常出现的情况一样,那么这个404未找到消息可能来自后端服务器,而不是您的Apache服务器

通常,您可以使用反向代理配置中的指令来解决此问题:

ProxyErrorOverride On
如果您无法访问主服务器配置,则可以在请求发送到代理服务器之前,使用
.htaccess
中的mod_rewrite提前触发404

例如,在现有mod_rewrite指令之前:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule \.php$ - [R=404]
但是,这是一种严格的“变通方法”,如果您可以访问服务器配置,则最好使用
ProxyErrorOverride
(如上所述)


旁白:

通过在
ErrorDocument
指令中指定绝对URL,这将触发错误文档的外部(302)重定向(附加请求),这通常是不需要的(并且您需要手动设置404响应代码)。最好将错误文档作为内部子请求发出:

 ErrorDocument 404 /404.php

问题与
.htaccess
中的当前指令无关

这个问题很可能是由于服务器配置和PHP在服务器上的实现方式造成的。如果对
.php
文件的请求被代理到后端服务器进行处理,就像FastCGI类型配置中经常出现的情况一样,那么这个404未找到消息可能来自后端服务器,而不是您的Apache服务器

通常,您可以使用反向代理配置中的指令来解决此问题:

ProxyErrorOverride On
如果您无法访问主服务器配置,则可以在请求发送到代理服务器之前,使用
.htaccess
中的mod_rewrite提前触发404

例如,在现有mod_rewrite指令之前:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule \.php$ - [R=404]
但是,这是一种严格的“变通方法”,如果您可以访问服务器配置,则最好使用
ProxyErrorOverride
(如上所述)


旁白:

通过在
ErrorDocument
指令中指定绝对URL,这将触发错误文档的外部(302)重定向(附加请求),这通常是不需要的(并且您需要手动设置404响应代码)。最好将错误文档作为内部子请求发出:

 ErrorDocument 404 /404.php

你有访问主服务器配置的权限吗?我很确定我以前已经告诉过你有多大的错误
errordocument404https://www.rsseosolution.com/404.php
is-这将导致外部重定向,因此,原始URL的请求将不再以404状态码正确响应。抱歉,回复太晚。是@MrWhite我正在使用VPS,我可以访问我的服务器(Plesk)。@04FS我将htaccess中的404行更改为
ErrorDocument 404/404.php
,但我的问题仍然没有解决。。。。。如果domain.com/suraj.html(重定向很好)但是domain.com/suraj.php(说文件找不到)。你有访问主服务器配置的权限吗?我很确定我过去已经告诉过你有多大的错误
ErrorDocument 404https://www.rsseosolution.com/404.php
is-这将导致外部重定向,因此,原始URL的请求将不再以404状态码正确响应。抱歉,回复太晚。是@MrWhite我正在使用VPS,我可以访问我的服务器(Plesk)。@04FS我将htaccess中的404行更改为
ErrorDocument 404/404.php
,但我的问题仍然没有解决。。。。。如果domain.com/suraj.html(重定向很好)但domain.com/suraj.php(表示未找到文件)。添加了
RewriteCond%{REQUEST_FILENAME}-f RewriteRule\.php$-[R=404]
现在它工作正常了。。。。。所有404页面或未知URL完全重定向到404.php页面。谢谢你让它工作起来了。然而,请注意,使用mod_重写实际上是一种“变通方法”。如果您有权访问主服务器配置(正如您所说的那样),则最好“修复”服务器配置。添加了
RewriteCond%{REQUEST_FILENAME}-f RewriteRule\.php$-[R=404]
现在它工作正常了。。。。。所有404页面或未知URL完全重定向到404.php页面。谢谢你让它工作起来了。然而,请注意,使用mod_重写实际上是一种“变通方法”。如果您可以访问主服务器配置(正如您所说的),那么“修复”服务器配置是更好的选择。