我在.htaccess文件中使用了以下代码:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
使用它后,它最终允许我删除文件扩展名,我的目标,
但随后子目录不再重定向到各自的索引文件,
相反,只显示“禁止”和“404”消息。
然后我尝试在.htaccess中进行手动重定向:
Redirect 301 /subfolder http://www.domain.com/subfolder/index
然后让我陷入了重定向循环,即使在源代码中删除它们之后,它们也继续存在。我还应该指出,我几乎没有使用.htaccess的经验。
答案 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