子目录不重定向到索引

Subdirectory not redirecting to index

我在 .htaccess 文件中使用了以下代码:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ .php [NC,L]

使用它后,它终于允许我删除文件扩展名,我的目标,
但是子目录不再重定向到它们各自的索引文件, 而不是仅显示 'Forbidden' 和“404”消息。

然后我尝试在 .htaccess 中进行手动重定向:

Redirect 301 /subfolder http://www.domain.com/subfolder/index

这让我陷入了重定向循环,即使在源代码中删除它们之后,它们仍然存在。我还应该指出,我几乎没有使用 .htaccess 的经验。

试试这个重定向。它陷入了一个循环,因为 301 是一个永久重定向,它被保存在浏览器中。

RedirectMatch 301 /subfolder(.*) //

欢迎来到使用永久重定向进行测试的美妙世界:犯了一个错误,它就会继续犯错误,直到您清除浏览器缓存。

首先,去掉重定向,清除浏览器缓存。其次,假设您的规则适用于每个请求,而不仅仅是您想要更改的请求。

您确定的问题是对符合您规则的目录的请求,然后被重写。对 http://domain.com/sub/ 的请求将被重写为 http://domain.com/sub/.php。现在那不是任何存在的东西。唯一能让你免于无限递归的是检查 url.

中的点

那么,我们该如何解决呢?好吧,我们检查请求的文件是否不是起始目录。现在我们不重写 url 如果它是一个目录,DirectoryIndex 会处理剩下的事情。为防止无限递归,您可以测试 url 是否已以 .php 结尾,但在这种情况下您已经处理好了。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\.]+)$ .php [NC,L]