Я весь день обнимаю эту проблему, и пока что ничего не получается. Я признаю, что это может быть действительно неприятной проблемой, но я даже не могу объяснить это точно в данный момент, но я постараюсь и с нетерпением жду помощи!
У меня есть сайт 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}
часть для базового корня, но все же увидеть его в адресной строке или хотя бы понять, где скрывается проблема.
Проблема возникает в тегах HTML-ссылок и автоматически делаются гиперссылки в навигации. Теперь они видят базовый путь как
www.example.com/porfolio/test/blog/{some article}
поэтому путь к файлам сейчас неправильный, поэтому я не вижу своих стилей и картинок.
Это звучит как «проблема» относительного пути на стороне клиента. Если вы используете относительные URL-адреса к своим стилям и изображениям, теперь URL-адреса относятся к /porfolio/test/blog/
не /porfolio/test/
,
Вам нужно либо использовать абсолютные или относительные к корневым (начиная с косой черты) URL-адреса в HTML-коде на стороне клиента, либо использовать base
тег в head
раздел, информирующий браузер, каковы эти относительные пути родственник к.
См. Мой ответ в стеке профессиональных веб-мастеров:
.URL перезаписи htaccess приводит к отсутствию CSS
Других решений пока нет …