返回500内部服务器错误,而不是:404-未找到

时间:2019-02-17 10:22:21

标签: .htaccess http-status-code-404

我收到500 Internal Server Error而不是:404-每当我为网站键入不存在的页面地址时,都找不到。

我最好的猜测是它与我的.htaccess设置有关:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301] 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ $1 [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ $1.php [L,QSA] 

ErrorDocument 404 /404.php

我的.htaccess检查并将所有URL重定向到https://www.形式。它还负责在所有页面中隐藏.php扩展名。

我花了很长时间才想到上面的代码,现在我真的很害怕更改任何东西,因为我对.htaccess语法不太满意。

任何帮助或建议将不胜感激!

2 个答案:

答案 0 :(得分:1)

  1. 您的2个重定向规则必须合并为一个,以避免进行多次301重定向(不利于SEO和效率)
  2. 您必须先检查.php文件是否存在,然后才能在您的URI中添加.php
  3. 在规则中避免对主机名进行硬编码。

.htaccess的完整权限:

ErrorDocument 404 /404.php

RewriteEngine On

## add www and turn on https in same rule
RewriteCond %{HTTP_HOST} !^www\. [NC,OR]
RewriteCond %{HTTPS} !on
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L,NE]

# if not a directory and .php file is present then add .php extension
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [L]

答案 1 :(得分:0)

在这些拖曳线之后:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

添加此行:

RewriteCond %{REQUEST_FILENAME}\.php -f

确保在发送给请求之前,该请求接受php扩展名:

RewriteRule ^(.*)$ $1.php [L,QSA] 

当您向任何目标发送不存在的请求时,请确保该目标将正确处理此问题,否则服务器将给出错误消息。