Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 子目录未重定向到索引_Php_.htaccess_Redirect_Subdirectory_Redirect Loop - Fatal编程技术网

Php 子目录未重定向到索引

Php 子目录未重定向到索引,php,.htaccess,redirect,subdirectory,redirect-loop,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.c

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

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
在使用它之后,它最终允许我删除文件扩展名,这是我的目标,
但是子目录不再重定向到各自的索引文件, 而只是显示“禁止”和“404”消息

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

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

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

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

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

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

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

您发现的问题是对与您的规则匹配的目录的请求,然后被重写。请求
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]

非常感谢,它工作得非常完美,同时让我对.htaccess有了更多的了解,以及删除规则似乎没有效果的原因。谢谢你帮我澄清。认可的。