У меня есть mod_substitute, как показано ниже, который отлично работает в curl, но не в браузере. Кроме того, он работает на всех страницах, кроме одной.
Я хотел бы знать, из-за чего mod_substitute не работает в браузере? как отладить и исправить эту проблему?
Чтобы устранить такие проблемы, рекомендуется сравнить заголовки в браузере с заголовками в curl (-i
, --include
flag покажет заголовки, а -H
flag может добавить их), а в браузере добавляйте по одному в команду curl, пока проблема не воспроизведется.
Я читаю в раздел комментариев на странице документации mod_substitute который описывает симптомы, подобные описанным вами, с mod_substitute
иногда не работает должным образом:
Оказалось, это порядок нашей цепочки фильтров. DEFLATE выполнялся до SUBSTITUTE. Для небольших файлов DEFLATE ничего не делал, поэтому работал. На некоторых внутренних прокси-серверах, которые не отправляли заголовок Accept-Encoding, он работал. Но в других случаях этого не происходило. В конце концов, это сработало лучше всего:
AddOutputFilterByType INFLATE;SUBSTITUTE;DEFLATE text/html text/plain text/xml
Другой вариант - отключить заголовок Accept-Encoding для целевого ресурса, где mod_substitute
предполагается делать это замены.
RequestHeader unset Accept-Encoding
Вместо этого (возможно) лучше использовать другой прием, чтобы вы могли воспользоваться преимуществами обоих mod_deflate
и mod_substitute
хотя.
Отключение сжатия gzip решает проблему. Добавьте следующие строки в httpd.conf SetEnv no-gzip 1 решает проблему