У меня был htaccess, который много лет работал с такой командой:
RewriteRule ^products/(.*).php product.php?page=$1&%{QUERY_STRING}
Сопоставление всех элементов в папке products с файлом product.php
Сегодня внезапно все URL начали выдавать 404. После многих часов копания я обнаружил, что команда теперь работает, только если в папке продуктов есть фактический файл (даже пустой файл - это не имеет значения). Например, products / p1.php будет работать, только если p1.php находится в папке products.
Я также запустил тест и добавил:
RewriteRule ^tests/(.*).php tests/index.php
и файл index.php в папке тестов с hello world. Это будет работать только для файлов, которые на самом деле в папке тестов tests / testing.php покажет содержимое index.php только в том случае, если в папке tests находится файл test.php.
Кто-нибудь имеет представление о том, что могло измениться в конфигурации сервера, чтобы вызвать это, или если есть способ исправить мою команду для работы без фактического файла в расположении URL-адреса?
Отредактировано 1 ноября 2018 года:
Я нашел это в httpd.conf:
<IfModule proxy_fcgi_module>
<FilesMatch \.(phtml|php[0-9]*)$>
SetHandler proxy:unix:/opt/cpanel/ea-php70/root/usr/var/run/php-fpm/.sock|fcgi://mydomain.com
</FilesMatch>
RewriteCond %{REQUEST_FILENAME} \.php$
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-f
RewriteRule (.*) - [H=text/html]
</IfModule>
Может ли это быть причиной?
Еще одно обновление:
Итак, эта строка
RewriteRule ^tests/(.*) tests/index.php
Будет работать для существующих файлов, а также для несуществующего каталога.
так что тесты / dir1 / перенаправят нормально. Но test / file.php будет перенаправлять, только если файл file.php действительно существует.
Еще одно обновление (извините, я отлаживаю его и нахожу наши дополнительные материалы):
Перенаправление не удастся только для файлов PHP! все остальные файлы будут работать правильно.
Окончательное решение:
Эти три строки в httpd.conf необходимо прокомментировать.
RewriteCond %{REQUEST_FILENAME} \.php$
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-f
RewriteRule (.*) - [H=text/html]
Я подозреваю, что они автоматически генерируются некоторыми обновленными Cpanel и попытаются сообщить об этом им.
Спасибо