Подтвердить что ты не робот

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

У меня есть правило для .htaccess

Options +FollowSymLinks

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -f [OR]

RewriteRule ^detail/([0-9]+)/?$ detail.php?id=$1

Он перенаправляет URL 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 и позволяет использовать "относительные пути"?

4b9b3361

Ответ 1

Не ленитесь и измените относительные URI в своих ресурсах на абсолютный /css/style.css к корневому каталогу, например /css/style.css. Это лучшее.

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

Это должно работать, но я бы не пошел по этому пути.

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

Ответ 2

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

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

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

<base href="/">

Ответ 3

Я применил перенастройку url к проекту в основной 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]

Ответ 4

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

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

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

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

Ответ 5

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

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