子目录不重定向到索引

时间:2016-04-30 17:19:31

标签: php .htaccess redirect subdirectory redirect-loop

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

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

使用它后,它最终允许我删除文件扩展名,我的目标,
但随后子目录不再重定向到各自的索引文件, 相反,只显示“禁止”和“404”消息。

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

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

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

2 个答案:

答案 0 :(得分:2)

欢迎使用永久重定向进行测试的精彩世界:出错并继续出错,直到您清除浏览器缓存。

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

您发现的问题是对符合规则的目录的请求,然后重写。对http://domain.com/sub/的请求将被重写为http://domain.com/sub/.php。现在这不是任何存在的东西。保存您无限递归的唯一方法就是检查网址中的点。

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

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

答案 1 :(得分:-1)

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

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