Всем привет. Есть проблема в переходах по ссылкам. Постараюсь объяснить легким языком.
Пишу под шаблон MVC OOP. В маршрутизаторе сперва был такой код, который способствовал переходу по заданным ссылкам:
код №1:
$controller_name = isset($_GET["controller"]) ? ucfirst(strtolower($_GET["controller"])) : 'Main';
$action_name = isset($_GET["action"]) ? strtolower($_GET["action"]) : 'index';
Ссылки выглядели вот так: subas.loc/?controller=contacts
Решил привести ссылки в нормальный вид, а именно в такой: subas.loc/contacts
Для этого заменил вышеупомянутый код на этот:
код №2
$routes = explode('/', $_SERVER['REQUEST_URI']);
// получаем имя контроллера
if ( !empty($routes[1]) )
{
$controller_name = $routes[1];
}
// получаем имя экшена
if ( !empty($routes[2]) )
{
$action_name = $routes[2];
}
Теперь вбиваю в строке subas.loc/contacts и сервер apache выдает мне 404, т.е. ссылка, даже, не обрабатывается маршрутизатором
"Ладно", подумал я, "вернусь к коду №1 и сделаю через .htaccess". И поэтому вставил туда вот этот код:
код №3
<.htaccess>
AddDefaultCharset utf-8
Options +FollowSymLinks
Options -Indexes
DirectoryIndex index.php
RewriteEngine On
RewriteBase /
RewriteRule ^([a-z]+)/([a-z]+)/([0-9]+)/$ /?controller=$1&action=$2&id=$3&%{QUERY_STRING} [NS,L]
RewriteRule ^([a-z]+)/([a-z]+)/$ /?controller=$1&action=$2&%{QUERY_STRING} [NS,L]
RewriteRule ^([a-z]+)/([0-9]+)/$ /?controller=$1&id=$2&%{QUERY_STRING} [NS,L]
RewriteRule ^([a-z]+)/$ /?controller=$1&%{QUERY_STRING} [NS,L]
И вот опять apache выдает 404. Причем, на сколько я понял(по функции die()), код в index.php не выполняется. Наверно он ищет папку contacts.
Теперь решил прикольнутся: заменил код №1 на код №2 и оставил код №3(.htaccess) и что я вижу: работает. Вбиваю subas.loc/contacts и он мне открывает нужную страницу. Т.е. код в index.php выполняется. Получается какая-то тупость. .htaccess вроде должен переделывать ссылку в переменные для $_GET (что должно приводить к ошибке для кода №2), но этого не делает.
Что здесь вообще происходит, ребята? Помогите плиз. Вроде как легкая вещь, но разобраться не могу. Гуглил, но на помощь ничего не нашел.