为什么我为没有尾部斜杠的页面获得 404,但它适用于尾部斜杠


Why am I getting a 404 for a page without the trailing slash but it works with the trailing slash?

我有一个允许用户创建和构建网站的应用程序。 让我们称之为 system.com。 当用户使用他们转发到我们名称服务器的域(例如 domain.com(创建站点时,它会创建文件夹并通过cPanel API将其域添加到我们的服务器中,例如 system.com/[用户ID]/[站点ID]/。在该文件夹中,有一个索引.php文件和一个 .htaccess 文件,内容如下:

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^(.*)/$ index.php?page=$1 [L]

我不会详细介绍它是如何工作的,但基本上用户可以创建像 domain.com/something/something-else/ 这样的页面。 "东西"文件夹显然并不存在,我们的系统只是从htaccess中获取它们并从那里开始。

我的问题是 domain.com/something/something-else/ 有效,但 domain.com/something/something-else 返回 404。 我一直在做研究并尝试很多事情,但似乎无法让它发挥作用。 有什么想法吗? 提前谢谢。

编辑

应该提到我到目前为止尝试过的东西。 我尝试将重写规则更改为无论尾部斜杠如何都可以工作,如下所示:

RewriteRule ^(.*)(?/$) index.php?page=$1 [L]

以及其他变体。

我也尝试了不同的方法来强制尾部斜杠,但这些方法都没有奏效。

我认为您希望您的规则看起来像这样:

RewriteRule ^(.*)/?$ index.php?page=$1 [L]

它说:"任意数量的任意字符(可选后跟斜杠(应更改为 index.php?page=$1,其中 $1 是您在斜杠之前找到的字符。 如果这个规则匹配,也忽略你发现的任何其他规则。

它基于您的URL重写访问规则。

RewriteRule ^(.*)/$ index.php?page=$1 [L]

如您所见,index.php?page=$1 被别名化为 /,并且所有请求都发送到 index.php