【问题标题】:500 Internal Server Error returned instead of: 404 - Not Found返回 500 内部服务器错误,而不是:404 - 未找到
【发布时间】:2019-07-10 22:45:35
【问题描述】:

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

我最好的猜测与我的 .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 语法。

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

【问题讨论】:

  • @anubhava 是的
  • @Acidon 我认为是因为这条规则RewriteRule ^(.*)$ $1.php [L,QSA] 表示如果请求的URI 既不是文件也不是目录,则转到与第一组匹配的$1.php。它试图找到但没有得到,所以可能是 500 服务器错误,因为根据请求 URI,您不能拥有这样的动态文件。你检查过日志吗?

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


【解决方案1】:
  1. 您的 2 条重定向规则必须合二为一,以避免多次 301 重定向(不利于 SEO 和效率)
  2. 在您的 URI 中添加 .php 之前,您必须检查是否存在 .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]

【讨论】:

  • 现在输入不存在的页面而不是给出 500 错误会将我重定向到主页。需要转到404.php
  • 如您所见,这些规则没有调用您的主页或index.php,因此它必须是您的代码中的某些内容。进一步测试将第一行更改为ErrorDocument 404 default 并重新测试。
  • 啊,你是对的,底部有一些额外的字符串导致了这个,现在它工作得很好,谢谢!
【解决方案2】:

在这些拖线之后:

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

添加这一行:

RewriteCond %{REQUEST_FILENAME}\.php -f

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

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

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

【讨论】:

    猜你喜欢
    • 2012-04-06
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    • 2020-09-12
    • 2021-06-18
    • 2020-10-13
    • 1970-01-01
    • 2021-11-12
    相关资源
    最近更新 更多