Intereting Posts
Как получить временную метку unix с даты PHP? Найти, если значение существует в JSONArray в php Получить ВСЕ результаты из базы данных с именем пользователя Не удалось загрузить запрошенный класс: Session Codeigniter 3 Удаление последней запятой в PHP? php / mysql – подготовленная в PDO вставка, не работает, и никаких сообщений об ошибках Отправка электронной почты через SMTP Gmail с помощью PHP Возможны ли 301 переадресации с помощью javascript или jQuery? Могу ли я получить пользовательский формат даты для сбора (списков) на Laravel5? Почему функция gzuncompress () PHP может пойти не так? Как отправить электронное письмо с вложениями из формы PHP? Сравнение двух строк версии в PHP Зачем использовать фреймворки? Убедите меня, что я должен выяснить Zend Framework и использовать его Codeigniter escapeshellarg () отключен по соображениям безопасности PHP: выдать всплывающее предупреждение, а затем перенаправить страницу

Переписывание URL: css, js и изображения не загружаются

Я следую правила для .htaccess

 Options +FollowSymLinks RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteRule ^detail/([0-9]+)/?$ detail.php?id=$1 

Он перенаправляет http://localhost/detail/123 на http://localhost/detail.php?id=123 . Страница перенаправляется успешно, но проблема заключается в том, что CSS, JS, and images не загружаются,

CSS, js-файлы расположены под http://localhost/css/ и http://localhost/js/

Одним из решений является использование абсолютного пути (ex / CSS или / js, а не только CSS /, / js, но это не кажется надежным решением, поскольку мы должны изменить его на всех файлах,

Любое другое решение, основанное на правилах .htaccess , которое не зависит от редактирования всех файлов PHP и позволяет использовать «относительные пути»?

Не ленитесь и измените свои относительные URI в своих ресурсах. Это лучшее.

Вы можете получить умный и использовать регулярное выражение и заменить все нужные вам файлы, которые будут похожи на несколько лайнеров, и все готово. Сколько мест может измениться? И вы должны использовать шаблон.

Это должно работать, но я не пошел бы так.

RewriteRule ^detail/(css|js|img)/(.*)?$ /$1/$2 [L,QSA,R=301]

одним из решений является использование абсолютного пути (ex / css или / js, а не только css /, / js, но это не выглядит надежным решением, так как мы должны изменить его для всех файлов,

Это связано с тем, что ваши относительные URI изменили базу. Первоначально базой является / когда страница /detail.php?id=123 , и браузер правильно заполняет относительные ссылки с / base. Но когда браузер переходит на страницу типа /detail/123 база внезапно становится /detail/ и она пытается добавить это перед всеми относительными URL-адресами и, следовательно, ни одна из них не загружается.

Вы можете либо сделать свои ссылки абсолютными, либо изменить базу URI в заголовке ваших страниц (между тегами <head> </head> ):

 <base href="/"> 

Я применил перенастройку url к проекту в core php. Я столкнулся с такой же проблемой. css, Js и изображения не загружались. Я использовал это, и это сработало для меня. Источник

 # Allow any files or directories that exist to be displayed directly RewriteCond ${REQUEST_URI} ^.+$ RewriteCond %{REQUEST_FILENAME} \.(gif|jpe?g|png|js|css|swf|php|ico|txt|pdf|xml)$ [OR] RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d [OR] RewriteCond %{REQUEST_FILENAME} -l RewriteRule ^ - [L] 

Ответ Энтони вполне правдоподобен, и он на самом деле пытается привнести некоторые хорошие практики.

Однако, поскольку вы не довольствуетесь этим ответом, это другое решение. Просто вставьте эту строку в свой .htaccess перед любой командой Rewrite:

 RedirectMatch permanent ^/detail/((css|js)/.*) /$1 

Он перенаправит все изначально 404 запросов на /details/css/style.css и /details/js/js.s в их фактическое местоположение. Ни то, ни другое не очень красивое и элегантное, но оно просто работает.

этот код отлично работает для меня, добавляет перед правилом перенаправления (RewriteRule ^ detail / ([0-9] +) /? $ detail.php? id = $ 1)

 RewriteRule ^(.+)/(admin|css|fonts|ico|include|js|images)/(.*)$ $2/$3 [L]