mod_rewrite: веб-страница имеет цикл перенаправления

mod_rewrite: веб-страница имеет цикл перенаправления

Я пытаюсь указать параметр, который идет сразу после имени хоста, например:

www.domain.com/параметр

По этой причине я установил следующее правило rewriteRule для двух значений параметров, с которыми я хотел бы работать:

RewriteRule ^(en|pt)$ /index.php?language=$1&%{QUERY_STRING} [L]

Работает отлично! Хотя мне нужно создать новое правило, чтобы перенаправлять любые запросы без одного из перечисленных параметров.

По этой причине я подумал, что это сработает:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^(en|pt)$
RewriteRule ^(.*)$ /pt/$1/ [L,R=301]

Но, к сожалению, наблюдается цикл перенаправления.

Я получаю:

http://hostname/pt/pt/pt/pt/pt/pt/pt/pt/pt/pt/pt/pt/pt/pt/pt/pt/pt/pt/pt/pt/pt//

Буду признателен за любые советы, как это исправить!

решение1

Это потому чтокаталогинеобычные файлы.

http://httpd.apache.org/docs/current/mod/mod_rewrite.htmlid( для фрагмента нет HTML DOM ! ближайший — не имеющий отношения к делу LA-U, даже то, что должно было быть , id="LA-F"отсутствует!)

Вы можете выполнить различные проверки атрибутов файла:

'-d' (is directory)
Treats the TestString as a pathname and tests whether or not it exists, and is a directory.
'-f' (is regular file)
Treats the TestString as a pathname and tests whether or not it exists, and is a regular file.

Если остальная часть вашей конфигурации верна (я не уверен, что добавление завершающего слеша — хорошая идея), вам следует добавить дополнительное условие для !-d:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^(en|pt)$
RewriteRule ^(.*)$ /pt/$1/ [L,R=301]

Также рассмотрите возможность перехода на nginx! Он не только имеет более понятный синтаксис, более ориентированный на общее использование, но и имеет прямые ссылки на соответствующую документацию, например, так --http://nginx.org/r/if.

проверка существования файла, каталога или символической ссылки с помощью операторов «-e» и «!-e»;

решение2

%{REQUEST_URI}— это путь URI, следующий сразу за именем хоста, поэтому он начинается с косой черты:/

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/(en|pt)$
RewriteRule ^.*$ /pt/$0/ [R=301,L]

Связанный контент