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

.htaccess 返回500内部服务器错误,而不是:404-未找到,.htaccess,http-status-code-404,.htaccess,Http Status Code 404,当我为我的站点键入一个不存在的页面地址时,我得到的是500个内部服务器错误,而不是: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/$

当我为我的站点键入一个不存在的页面地址时,我得到的是500个内部服务器错误,而不是: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
My.htaccess检查所有URL并将其重定向到
https://www.
表格。它还负责从所有页面隐藏.php扩展

我花了很长时间才想出上面的代码,现在我真的不敢更改任何东西,因为我不太擅长.htaccess语法


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

在这两条线之后:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
添加此行:

RewriteCond %{REQUEST_FILENAME}\.php -f
要确保在发送请求之前接受
php
扩展名,请执行以下操作:

RewriteRule ^(.*)$ $1.php [L,QSA] 
当您向任何目标发送不存在的请求时,请确保目标将正确管理此问题,否则服务器将给出错误消息

  • 您的两个重定向规则必须合并为一个,以避免多个
    301
    重定向(不利于SEO和效率)
  • 在URI中添加
    .php
    之前,必须检查是否存在
    .php
    文件
  • 避免在规则中硬编码主机名
  • Full.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]
    

    @阿努巴瓦是的does@Acidon我认为这是因为这个规则
    RewriteRule^(.*)$$1.php[L,QSA]
    ,它说如果请求的URI既不是文件也不是目录,那么就转到与第一组匹配的
    $1.php
    。它试图找到但没有得到,所以可能是500服务器错误,因为根据请求URI,您不能有这样的动态文件。你检查日志了吗?现在输入不存在的页面而不是给出500个错误会将我重定向到主页。它需要转到404.phpAs,您可以看到,这些规则在哪里调用您的主页或
    index.php
    ,所以它必须在您的代码中。若要进一步测试,请将第一行更改为
    ErrorDocument 404 default
    ,然后重新测试。啊,您是正确的,底部有一些额外的字符串导致了这一情况,它现在工作得很好,谢谢!