如何使用多个重写规则修复htaccess错误 - ERR_TOO_MANY_REDIRECTS

时间:2016-03-28 16:36:46

标签: apache .htaccess mod-rewrite

为什么这个htaccess有错误。它说“很多重定向”请帮助谢谢

PaymentDTO

我无法尝试错误的代码,它总是出现错误

1 个答案:

答案 0 :(得分:0)

您的.htaccess存在多个问题。我建议重新订购和编辑规则。

在我看来,这是一种更好的方法。我将解释下面的部分。

RewriteEngine on
RewriteBase /
Options +FollowSymLinks

# External redirect: Remove www from domain
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

# External redirect: Ensure language code is set
RewriteCond %{HTTP_HOST} ^us\.domain\.com$
RewriteCond %{REQUEST_URI} !^/(ae_en|ae_ar) [NC]
RewriteCond %{REQUEST_URI} !^/index.php$ [NC]
RewriteRule ^(.*)$ /ae_en/$1 [R=301,L]

# Internal redirect: Pass everything non-existent to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* index.php [L]

结构

首先,一般选项和设置应该在顶部而且只有一次,即

RewriteEngine on
RewriteBase /
Options +FollowSymLinks

其次,我希望正确显示外部URL,因此我将所有外部重定向分组 - 在上面的代码块中用注释表示。

第三,内部"重定向"关注,意味着将(现在正确的和最终的)外部URL映射到正确的脚本。

此结构可确保内部脚本仅匹配在下一次.htaccess匹配时针对RewriteRule重新运行时不会更改的网址。

省略index.php

的外部重定向

我猜您在添加内部重定向后添加了index.php重定向处理,这可能导致index.php显示在浏览器中。因此,有了上述结构,我认为它不会再出现。

上次RewriteRule

时出错

正如Mike Rockett在上面的评论中指出的那样,上一个RewriteRule也出现了错误。

避免重定向循环

为了避免在使用最后一条规则重写为index.php时出现重定向循环,您必须明确地从语言代码重定向中排除index.php,即

RewriteCond %{REQUEST_URI} !^/index.php [NC]