Назад | Перейти на главную страницу

Apache обрабатывает файл PHP как обычный текст, если к расширению файла добавлен% 20

Я никогда не видел этого раньше, и Google пока не дал никаких результатов. Я почти уверен, что это такая глупая ошибка, что я должен ее увидеть, но я просто не вижу.

У меня очень простой сервер Apache с PHP, он отлично обслуживает файлы PHP годами, без проблем. Однако я только что обнаружил, что если вы добавите %20 после .php в URL-адресе (например, https://www.example.com/index.php%20), Apache обрабатывает файл как обычный текст вместо того, чтобы обслуживать страницу 404.

Моя conf для модуля php кажется прекрасной, и я действительно не смог найти какую-либо информацию при поиске в Google для этой проблемы.

Содержание моего /etc/apache2/mods-enabled/php5.conf

<IfModule mod_php5.c>
  AddType application/x-httpd-php .php .phtml .php3
  AddType application/x-httpd-php-source .phps
</IfModule>

Версия Apache 2.2.22 работает на Debian Wheezy.

Кто-нибудь когда-либо видел, как это происходит, и знает, какую магическую настройку мне нужно настроить, чтобы Apache не делал это и вместо этого обслуживал страницу 404?

Попробуйте это, замените текущий на это:

<FilesMatch ".+\.ph(p[345]?|t|tml)$">
    SetHandler application/x-httpd-php
</FilesMatch>

Затем перезапустите apache и посмотрите, исправит ли это это. Я не знаю, будет ли, думаю, что нет, но попробуйте, чтобы убедиться, в любом случае это более точное правило.

Но мне кажется, что что-то в apache неправильно обрабатывает URL-адреса с пробелом, я тестировал это в своей локальной системе, чтобы увидеть, и когда я запросил:

"mysite.com/test.php "

Apache правильно переписывает его внутренне на

"mysite.com/test.php"

Так что я почти наверняка считаю, что другая конфигурация отключена. Но попробуйте описанное выше и убедитесь.

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

Я считаю, что вы можете полностью исключить php из этого, проблема, похоже, связана с apache2.2 и тем, как он обрабатывает URL-адреса, у меня уже давно установлена ​​эта apache, и я знаю, что я не добавлял и не удалял конфигурацию, создаст такую ​​ситуацию., поэтому вы, вероятно, захотите очень внимательно просмотреть любые другие изменения конфигурации, отличные от php, которые вы могли внести после установки.

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

В качестве краткосрочного взлома, но НЕ решения, вы можете использовать правило перезаписи, которое очень просто:

RewriteRule ^(.*)([[:space:]]|%20)+$ /$1 [R=301,L]

Я не могу это проверить, потому что у меня нет apache, который не может обрабатывать пробелы /% 20 в конце URL-адресов, и я не знаю, как это сделать.

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