Перезапись внутреннего URL больше не работает после обновления Apache до 2.4

Выполняете ли вы это для ведения журнала? Если это так, имеется несколько библиотек для этого . Двумя наиболее популярными являются Log4j и Logback .

Java 7 +

Если вам просто нужно сделать это один раз , класс Files делает это легко:

try {
    Files.write(Paths.get("myfile.txt"), "the text".getBytes(), StandardOpenOption.APPEND);
}catch (IOException e) {
    //exception handling left as an exercise for the reader
}

Осторожно: вышеприведенный подход бросит NoSuchFileException, если файл еще не существует. Он также не добавляет новую строку автоматически (которую вы часто хотите при добавлении к текстовому файлу). В ответе Стив Чамберса описывается, как вы могли бы это сделать с классом Files.

Однако, если вы будете писать в один и тот же файл много раз, вышеприведенное должно открывать и закрывать файл на диске много раз, что является медленной операцией. В этом случае буферизованный писатель лучше:

try(FileWriter fw = new FileWriter("myfile.txt", true);
    BufferedWriter bw = new BufferedWriter(fw);
    PrintWriter out = new PrintWriter(bw))
{
    out.println("the text");
    //more code
    out.println("more text");
    //more code
} catch (IOException e) {
    //exception handling left as an exercise for the reader
}

Примечания:

  • Второй параметр конструктора FileWriter скажет ему добавить к файлу, вместо написания нового файла. [Если файл не существует, он будет создан.)
  • Рекомендуется использовать BufferedWriter для дорогой записи (например, FileWriter).
  • Используя кнопку PrintWriter дает вам доступ к синтаксису println, к которому вы, вероятно, привыкли, от System.out.
  • Но обертки BufferedWriter и PrintWriter не являются строго необходимыми.

Старая Java

try {
    PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("myfile.txt", true)));
    out.println("the text");
    out.close();
} catch (IOException e) {
    //exception handling left as an exercise for the reader
}

Обработка исключений

Если вам нужна надежная обработка исключений для более старой Java, она становится очень многословной:

FileWriter fw = null;
BufferedWriter bw = null;
PrintWriter out = null;
try {
    fw = new FileWriter("myfile.txt", true);
    bw = new BufferedWriter(fw);
    out = new PrintWriter(bw);
    out.println("the text");
    out.close();
} catch (IOException e) {
    //exception handling left as an exercise for the reader
}
finally {
    try {
        if(out != null)
            out.close();
    } catch (IOException e) {
        //exception handling left as an exercise for the reader
    }
    try {
        if(bw != null)
            bw.close();
    } catch (IOException e) {
        //exception handling left as an exercise for the reader
    }
    try {
        if(fw != null)
            fw.close();
    } catch (IOException e) {
        //exception handling left as an exercise for the reader
    }
}

17
задан Community 23 May 2017 в 12:17
поделиться

3 ответа

Это известная ошибка в Apache 2.4 . Я использовал обходной путь, представленный здесь , и он работает сейчас.

13
ответ дан Community 23 May 2017 в 12:17
поделиться

У меня также было 404 с перенаправлениями WordPress на виртуальных хостах после обновления до Apache 2.4.6

В моем случае проблема была решена путем изменения «AllowOverride None» на «AllowOverride FileInfo» для каждой конфигурации каталога виртуальных хостов.

4
ответ дан maratbn 23 May 2017 в 12:17
поделиться

Я также наткнулся на эту очень неприятную проблему. Решение состоит в том, чтобы отключить MultiViews в httpd.conf, добавив -MultiViews для нужного каталога, например:

<Directory /home/example.com/public_html>
    Options -Indexes -MultiViews
    AllowOverride All
    Require all granted
</Directory>

После этого перезаписи начали работать ожидаемым образом.

Не забудьте перезагрузить Apache после редактирования файлов конфигурации.

2
ответ дан Ilia Rostovtsev 23 May 2017 в 12:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: