2016-03-28 4 views
0

, почему этот htaccess имеет ошибку. он говорит, что «многие редирект», пожалуйста, помогите спасибоКак исправить ошибку htaccess с множественным правилом перезаписи - ERR_TOO_MANY_REDIRECTS

RewriteCond %{REQUEST_FILENAME} !-f 

RewriteCond %{REQUEST_FILENAME} !-d 

RewriteCond %{REQUEST_FILENAME} !-l 

RewriteRule .* index.php [L] 


RewriteEngine On 
RewriteBase/
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] 
RewriteRule ^(.*)$ http://%1/$1 [R=301,L] 

RewriteEngine on 
Options +FollowSymLinks 
RewriteCond %{THE_REQUEST} ^.*/index\.php 
RewriteRule ^(.*)index.php$ http://us.domain.com/ae_en/$1 [R=301,L] 


RewriteEngine on 
RewriteBase/
RewriteCond %{HTTP_HOST} ^us\.domain\.com$ 
RewriteCond %{REQUEST_URI} !^/(ae_en|ae_ar) [NC] 
RewriteRule ^(.*)/ae_en/%{REQUEST_URI} [R=301,L] 

я не могу попробовать неправильный код, он всегда появляется ошибка

+0

Эта линия, как представляется, неверно: 'RewriteRule^(. *)/Ae_en /% {REQUEST_URI} [R = 301, L]' ... –

+0

Какая должна быть правильная линия? Какова моя цель, я хочу поставить «ae_en» каждый URL-адрес после домена. – user3438096

+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-адреса с правильными сценариями.

Эта структура гарантирует соответствие внутренних скриптов по URL-адресу, который не изменится при повторном запуске с .htaccess в следующем RewriteRule совпадении.

Опуская внешний редирект для index.php

Я думаю, вы добавили обработку index.php переназначения после добавления во внутренней переадресации, что, вероятно, вызвало index.php, чтобы показать в браузере. Таким образом, с вышеупомянутой структурой, я полагаю, что она не появится снова.

Ошибка в последней RewriteRule

Как Майк Rockett указал в комментарии выше, также была ошибка в последнем RewriteRule.

Избегайте редирект петли

Чтобы избежать петли переадресации при перезаписи на index.php с последним правилом, вы должны явно исключить index.php из кода перенаправления языка, т.е.

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

Привет, Jan, я все еще получаю эту ошибку «Страница Us.mydomain.com не работает us.mydomain.com перенаправил вас слишком много раз». – user3438096

+0

Боковое примечание: не позволяйте кешу браузера обмануть вас. Он сохраняет перенаправления, поэтому лучше очистите его после внесения изменений! –

+0

Это сработало для вас? –

Смежные вопросы