【问题标题】:Subdirectory not redirecting to index子目录未重定向到索引
【发布时间】:2016-08-25 18:28:03
【问题描述】:

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

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

使用它后,它终于让我可以删除文件扩展名,我的目标,
但随后子目录不再重定向到各自的索引文件, 而是只显示“禁止”和“404”消息。

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

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

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

【问题讨论】:

    标签: php .htaccess redirect subdirectory redirect-loop


    【解决方案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 有了更多的了解,以及删除规则似乎没有效果的原因。感谢您为我解决这个问题。接受。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-11
      • 2015-11-04
      • 1970-01-01
      • 1970-01-01
      • 2014-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多