【问题标题】:Htaccess 404 redirect custom rule for nested directoriesHtaccess 404 重定向嵌套目录的自定义规则
【发布时间】: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


【解决方案1】:

本站所有的 ulr 都是根目录,没有任何地方嵌套的文件夹结构。

您可以使用此代码块替换所有 .htaccess 代码:

ErrorDocument 404 /404.php

Options -MultiViews 
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]

【讨论】:

  • 现在我面临需要在网站上引入一些嵌套 url 结构但它无法正常工作的情况。我也将这个问题作为一个单独的问题发布在这里 stackoverflow.com/questions/59364084 ,也许你可以看看?
猜你喜欢
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多