为了账号安全,请及时绑定邮箱和手机立即绑定

由于 mod 重写 htaccess 规则,嵌套 url 上出现 500 服务器错误而不是 404

由于 mod 重写 htaccess 规则,嵌套 url 上出现 500 服务器错误而不是 404

PHP
守着星空守着你 2022-06-17 16:35:44
我有一个带有自定义 .htaccess 文件的站点,它处理的事情很少:1)它将没有“.php”扩展名的url视为最后有“.php”。2)它重定向http://和http://www.网址https://www.这是 .htaccess 文件:ErrorDocument 404 /404.phpOptions -MultiViews RewriteEngine On## add www and turn on https in same ruleRewriteCond %{HTTP_HOST} !^www\. [NC,OR]RewriteCond %{HTTPS} !onRewriteCond %{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 extensionRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME}.php -fRewriteRule ^(.+?)/?$ $1.php [L]一切都按预期工作,但我观察到一些奇怪的行为导致 500 错误而不是 404:1)当您访问不存在的根级别 url,例如https://www.example.com/skjdfhkj404时,它会按预期重定向到。2)当您访问不存在的嵌套 url 例如https://www.example.com/some-text/skjdfhkj与任何现有的some-textphp 文件不匹配时,它会404按预期返回。3)但是,当您访问一些不存在的嵌套 url 时,例如https://www.example.com/some-existing-page-name/skjdfhkj,其中some-existing-page-name匹配现有 php 文件的名称(https://www. example.com/some-existing-page-name.php),然后它给出一个500 Server Error.我的问题是:如何更新我的 htaccess 以正确返回 a404而不是500当有人访问不存在的嵌套 url 例如https://www.example.com/some-existing-page-name/skjdfhkj(其中some-existing-page-name匹配名称现有的 php 文件 ( https://www.example.com/some-existing-page-name.php )) ?我想这与 mod rewrite 有关系,它将没有.php扩展名的 url 视为有.php,但不知道如何修改 htaccess 以使其正常工作:(
查看完整描述

1 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

尝试将最后一条规则更改为:


# if not a directory and .php file is present then add .php extension

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{DOCUMENT_ROOT}/$1.php -f

RewriteRule ^(.+?)/?$ $1.php [L]

%{REQUEST_FILENAME}有时可以使用部分匹配从文件系统中提供意外匹配。


查看完整回答
反对 回复 2022-06-17
  • 1 回答
  • 0 关注
  • 135 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信