【问题标题】:endless loop when rewriting from root to subfolder从根目录重写到子文件夹时的无限循环
【发布时间】:2015-11-25 05:44:04
【问题描述】:

我想将除根文件之外的所有请求从根目录重定向到 dev 目录。

example.com/anythingexample.com/dev/index.php?url=anything

我在 public_html 中的 htaccess

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule (.*) /dev/?url=$1 [QSA,NC,R]

当我访问http://example.com/anything时,它导致了一个无限循环错误我做错了什么?

谢谢!

【问题讨论】:

  • 为什么这里有R(重定向)标志?它不会暴露您的内部 URL 吗?

标签: .htaccess mod-rewrite


【解决方案1】:

试试:

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_URI} !^/dev

RewriteRule (.*) /dev/$1 [QSA,NC,R]

无限循环的原因可能是您的目标网址“/dev/?url=$1”正在重定向回自身。因为如果“/dev”不是真正的目录,您的规则中没有条件阻止它重定向到自己。

example.com/anything

正在重定向到

example.com/dev/?url=anything

第二次迭代

  example.com/dev/?url=anything

正在重定向到

example.com/dev/?url=dev

.......

它继续循环直到最后一次迭代。

您可以通过在规则中添加以下条件来解决此问题

@Hereblur 是对的,你应该添加:

 RewriteCond %{REQUEST_URI} !^/dev

如果它以“/dev”开头,它会忽略 uri 并跳过规则。

【讨论】:

    【解决方案2】:

    可能是您忘记将您的dev 排除在重定向之外。

      RewriteCond %{REQUEST_URI} !^/dev/
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-24
      • 1970-01-01
      • 2015-12-01
      • 2020-01-08
      • 2016-09-04
      • 2015-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多