Я искал ответ и был удивлен, что не смог найти эту конкретную ситуацию:
У меня есть "прямой" PHP-сайт по адресу http://www.mysites.com/site1/. и хотите со временем перенести его на CodeIgniter. Я знаю, что есть несколько способов сделать это, но я хотел бы оставить существующий сайт в покое и просто поместить папку CodeIgniter (CI) в корневой каталог (site1), а затем перенаправить запросы к нему, если файл или каталог не не существует.
Итак, этот файл .htaccess находится в папке site1:
RewriteEngine on
RewriteBase /site1/CI/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|images|robots\.txt|assets)
RewriteRule ^(.*)$ index.php/$1 [L]
и этот файл .htaccess находится в папке site1/CI (нужен?):
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|images|robots\.txt|assets)
RewriteRule ^(.*)$ index.php/$1 [L]
и файл config.php CodeIgniter содержит:
$config['base_url'] = 'http://www.mysites.com/site1/CI/';
Это прекрасно работает, если я пытаюсь перейти к местоположению на существующем сайте (например, http://www.mysites.com/site1/page.php), но если я попытаюсь перейти на страницу, которая должна быть перенаправлена в CodeIgniter (например, http://www.mysites.com/site1/home), я получаю сообщение об ошибке 404 от CodeIgniter. Похоже, что он ищет метод «дом» в контроллере «сайт1» вместо контроллера «дом».
Затем я попробовал этот файл .htaccess в корневом каталоге, чтобы избавиться от «site1», передаваемого в index.php:
RewriteBase /site1/CI/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|images|robots\.txt|assets)
RewriteRule /site1/(?:(.*)) index.php/$1 [L]
К сожалению, это заставило Apache вернуть ошибку 404.
Любые идеи? Спасибо!