У меня есть устаревшее приложение, которое я хочу обернуть в новый проект Symfony. Чтобы четко разделить вещи, я решил переместить все устаревшее приложение в папку legacy
который находится вне корня документа.
Поскольку некоторые из унаследованных скриптов по-прежнему следует вызывать напрямую, я создал псевдоним и написал RewriteRule:
Alias /legacy_public "C:\project_root\legacy\public"
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}/../legacy/public%{REQUEST_URI} -f
RewriteRule ^(.*)$ /legacy_public$1 [PT,L]
[...]
Это работает, пока нет информации о пути. Например, вызов URL www.example.org/showLogo.php
правильно проверяет, существует ли файл, перезаписывает URL-адрес и выполняет сценарий.
Однако для правильной работы сценарий ожидает некоторые данные о пути. При звонке www.example.org/inc/showLogo.php/38
указанный выше RewriteCond не соответствует, потому что нет файла с именем showLogo.php/38
.
После изучения документации мне неясно, как мне изменить условие, чтобы перед тестированием отбросить path_info-Part -f
Вы могли бы быть более строгими в своих RewriteRule
шаблон таким образом, чтобы создать обратную ссылку, которая исключает информацию о пути, сопоставляя только до и включая расширение файла и используя полный URL-путь (т.е. REQUEST_URI
) в замена вместо.
Например:
RewriteCond %{DOCUMENT_ROOT}/../legacy/public$1 -f
RewriteRule ^(.+\.php) /legacy_public%{REQUEST_URI} [PT,L]
В $1
обратная ссылка в RewriteCond
TestString то соответствует только upto включительно .php
, отбрасывая оставшуюся часть URL-пути.
Предположительно у вас также есть другие статические ресурсы (JS, CSS и изображения), которые вам также необходимо переписать, чтобы вы могли включить их в приведенное выше регулярное выражение:
RewriteRule ^(.+\.(?:php|js|css|jpg|png)) /legacy_public%{REQUEST_URI} [PT,L]
ИЛИ используйте другое правило «поймать все», как вы это делали изначально (которое не предполагает никакой информации о пути).
Это предполагает, что у вас нет законных URL-адресов, содержащих то, что «похоже» на промежуточный URL-адрес расширения файла (маловероятно).