为什么这个htaccess有错误。它说“很多重定向”请帮助谢谢
PaymentDTO
我无法尝试错误的代码,它总是出现错误
答案 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]