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