防止重定向循环发生的最简单方法是检查是否已经将URL重写到了预期的位置。我们可以用几种不同的方法来实现这一点;如果您知道一旦您重写了文件就会存在,则可以在
%{REQUEST_FILENAME} !-f
例如。
在您的情况下,因为您正在将所有内容重写到
/public_html
目录,我们可以检查是否已经完成了:
RewriteCond %{HTTP_HOST} ^(www|nl|es)\.example\.com$
RewriteCond %{REQUEST_URI} !^/example\.com
RewriteRule ^(.*)$ example.com/%1/$1 [L]
RewriteCond %{HTTP_HOST} ^(.*)\.example\.com$
RewriteCond %{HTTP_HOST} !^www\.example\.com$
RewriteCond %{REQUEST_URI} !^/example\.com
RewriteRule ^(.*)$ example.com/misc/%1/$1 [L]
诚然,我不知道你为什么现在遇到问题,但以前没有。我在我的测试服务器上运行了您的原始规则集,结果由于内部重定向太多而导致内部服务器错误,因此我们的设置一定存在差异。无论如何,希望这能让你的工作顺利进行。