Как мне помешать RewriteRule войти в бесконечный цикл? - PullRequest
0 голосов
/ 27 ноября 2010

Допустим, у меня есть файл с именем FILE%20NAME[1].png на моем сервере.

Браузер запрашивает FILE%20NAME%5B1%5D.png, избегая квадратных скобок, которые Apache интерпретирует как FILE NAME[1].png и, конечно, не может найти.

Я знаю, что мне следует просто переименовать файл, но как бы я написал правило перенаправления для быстрого исправления в .htaccess? Я пытался

RewriteRule ^folder/FILE\sNAME\[1\].png /folder/FILE\%20NAME\[1\].png [R=301,QSA,L,NE]

, что приводит к бесконечному циклу, поскольку переписанное имя файла по-прежнему соответствует правилу.

Ответы [ 3 ]

2 голосов
/ 27 ноября 2010
RewriteRule ^folder/FILE\sNAME\[1\].png /folder/FILE\%2520NAME\[1\].png [R=301,QSA,L,NE]
1 голос
/ 27 ноября 2010
  1. Вы ошибаетесь по поводу проблемы с самого начала - проблема не в том, что скобки экранированы.Правильный запрос на отправку для получения файла с именем «FILE% 20NAME [1] .png» в файловой системе будет «FILE% 2520NAME% 5B1% 5D.png» в URL.

  2. Если бы вы только что использовали Alias или не перенаправили RewriteRule, то не было бы проблем с циклами.

  3. Я почти уверен, что если вы позаботитесь оКак я уже говорил в задаче 1, с циклами проблем также не возникнет, потому что при отправке обратно правильной цели перенаправления URL нового запроса будет содержать %2520 (декодированный: %20), который выиграл 'не может быть сопоставлено \s, поэтому правило не будет применяться.

1 голос
/ 27 ноября 2010

Вам необходимо экранировать знак % (проценты), потому что в противном случае %20 интерпретируется как (пробел).

% сбегает до %25, замена %20 на %2520 должна помочь.

См. Также: Кодировка в процентах .

...