@Khoja

Как перейти по ссылкам (php)?

Всем привет. Есть проблема в переходах по ссылкам. Постараюсь объяснить легким языком.

Пишу под шаблон 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), но этого не делает.

Что здесь вообще происходит, ребята? Помогите плиз. Вроде как легкая вещь, но разобраться не могу. Гуглил, но на помощь ничего не нашел.
  • Вопрос задан
  • 261 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы