Перенаправление фронт-контроллера работает, но для некоторых маршрутов маршрут неправильный

Я весь день обнимаю эту проблему, и пока что ничего не получается. Я признаю, что это может быть действительно неприятной проблемой, но я даже не могу объяснить это точно в данный момент, но я постараюсь и с нетерпением жду помощи!

У меня есть сайт MVC с Front Controller. Все запросы перенаправляются на index.php и зависит от URI (который я сделал удобным для пользователя, используя специальный массив с маршрутами), мой Front Controller вызывает правильный Controller. Стандартный маршрут. И в принципе все работает нормально. За исключением одного нюанса.

мой .htaccess файл состоит из них:

RewriteEngine on
RewriteBase /portfolio/test/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php

это пример маршрутов, которые я использую для удобных URL-адресов и для вызова соответствующих контроллеров:

    <?php

return array (
'main'               => 'index/main', //actionMain in IndexController
'contact'            => 'contact/index',
'prise'              => 'price/index',
'blog/([0-9]+)'      => 'blog/post/$1',
'blog'               => 'blog/list',
etc...
);

Если я пойду к /main страница это все хорошо, тогда я нажимаю на ссылку с /portfolio и это все хорошо.

Кстати, моя навигация осуществляется автоматически с использованием массива с «slug» и «name» для кнопок меню. Так в nav.php Я беру массив с слагами и именами, как это:

<?php

$navItems = array(

array(
'slug'            => "main",
'title'           => "Main"),

array(
'slug'            => "portfolio",
'title'           => "Portfolio"),

array(
'slug'            => "prise",
'title'           => "Prise List"),

etc...

);

?>

я использую foreach для этого массива и сделать кнопки автоматически, как это:

echo "<a href=\"$Item[slug]\">"

Но проблема возникает, когда я иду в blog/{some_article} (например. blog/1) или прямо поставил blog/ в поле адреса после моего базового пути (который www.example.com/porfolio/test/). И кажется, что проблема не в перенаправлении, потому что правильный контроллер вызван, и даже данные из моей базы данных здесь. Проблема возникает в тегах HTML-ссылок и автоматически делаются гиперссылки в навигации. Теперь они видят базовый путь как www.example.com/porfolio/test/blog/{some article} поэтому путь к файлам сейчас неправильный, поэтому я не вижу своих стилей и картинок. Мне нужно как-то избавиться от этого blog/{some article} часть для базового корня, но все же увидеть его в адресной строке или хотя бы понять, где скрывается проблема.

1

Решение

Проблема возникает в тегах HTML-ссылок и автоматически делаются гиперссылки в навигации. Теперь они видят базовый путь как www.example.com/porfolio/test/blog/{some article} поэтому путь к файлам сейчас неправильный, поэтому я не вижу своих стилей и картинок.

Это звучит как «проблема» относительного пути на стороне клиента. Если вы используете относительные URL-адреса к своим стилям и изображениям, теперь URL-адреса относятся к /porfolio/test/blog/не /porfolio/test/,

Вам нужно либо использовать абсолютные или относительные к корневым (начиная с косой черты) URL-адреса в HTML-коде на стороне клиента, либо использовать base тег в head раздел, информирующий браузер, каковы эти относительные пути родственник к.

См. Мой ответ в стеке профессиональных веб-мастеров:
.URL перезаписи htaccess приводит к отсутствию CSS

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]