【发布时间】:2019-10-04 16:09:28
【问题描述】:
我有一个带有自定义 .htaccess 文件的站点,它处理的事情很少:
1) 它将没有“.php”扩展名的 url 视为最后有“.php”。
2) 它重定向 http:// 和 http://www。网址为https://www。
这是 .htaccess 文件:
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]
ErrorDocument 404 /404.php
一切正常,但我在网站管理员工具中发现了一些奇怪的 ul,导致 500 错误而不是 404:
当您访问不存在的根级 URL(例如 https://www.example.com/skjdfhkj)时,它会按预期重定向到 404。
但是,当您访问一些嵌套的 url,例如 https://www.example.com/some-page/skjdfhkj ,其中 some-page 匹配现有 php 文件的名称时,它会发出 500 服务器错误。当some-page 不匹配任何现有的 php 文件时,它会按预期返回 404。
此站点中的所有 ulr 都是根级别的,并且任何地方都没有嵌套的文件夹结构。我检查了代码,没有指向嵌套 url 的链接,所以不确定它们是如何进入网站管理员工具的,很可能在网站上的某个位置有一些错误的链接不再存在。
我的问题是,当有人访问不存在的嵌套 URL(例如 https://www.example.com/some-page/skjdfhkj)时,如何更新我的 htaccess 以正确返回 404?
【问题讨论】:
-
尝试在 .htaccess 顶部添加
Options -MultiViews -
@anubhava 我试过了,得到了同样的结果。我刚刚注意到的一件事(并在我的问题中进行了更新)是,当您访问一些嵌套 url 时,例如 example.com/some-page/skjdfhkj ,其中
some-page与现有 php 文件的名称匹配,然后它会发出 500 服务器错误。当some-page不匹配任何现有的php文件时,它会按预期返回404。
标签: php .htaccess mod-rewrite http-status-code-404