子目录未重定向到索引


Subdirectory not redirecting to index

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

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

使用后,它终于允许我删除文件扩展名,这是我的目标,
但是随后子目录不再重定向到它们各自的索引文件,而只显示"禁止"answers"404"消息。

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

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

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

的经验

欢迎来到永久重定向测试的奇妙世界:犯一个错误,它会继续犯错误,直到你清除浏览器缓存。

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

您发现的问题是请求一个与您的规则匹配的目录,然后被重写。对http://domain.com/sub/的请求将被重写为http://domain.com/sub/.php。现在这已经不存在了。唯一能让你免于无限递归的就是检查url中的点。

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

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

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

RedirectMatch 301 /subfolder(.*) //$1