Есть несколько проблем, с вашей .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]
Эта линия, как представляется, неверно: 'RewriteRule^(. *)/Ae_en /% {REQUEST_URI} [R = 301, L]' ... –
Какая должна быть правильная линия? Какова моя цель, я хочу поставить «ae_en» каждый URL-адрес после домена. – user3438096
Ну, я не понимаю, в чем цель этого набора правил ... Что вы пытаетесь сделать там? –